Мой первый опыт программирования для Photoshop

    Доброго! Как и обещал здесь — напишу о своём опыте создания скрипта для программы Adobe Photoshop. Опыт этот не претендует на 100% верное руководство к действиям — просто я так сделал, и всё работает.

    Тут будет не показательное программирование, а скорее некоторые шишки, из-за которых он создавался день, а не 10 минут:)

    Во-первых, ссылки.

    http://www.adobe.com/devnet/photoshop/scripting/ — эдоби о своём детище, мануалы
    http://blogs.adobe.com/crawlspace/2006/04/cs_ui_builder_2.html — построитель ui для вашего скрипта(весьма и весьма недоделанный, но лучше чем ручками)
    http://bigmag.net/copyright/ — мой скрипт

    Ну что ж, можно открыть copyrightPlacerRU.jsx в любом редакторе кода и следить за повествованием.
    Разбирать каждую строку думаю не стоит(я и сам кое-что делал просто по наитию, об этом ниже)

    Первое с чем я столкнулся — это построение интерфейса. Перерыв гайды с сайта эдоби я не нашел ничего внятного, начал искать дальше — и вот замечательная программа CSUIB_2. Она создаёт строку, благодаря которой мы создаём экземпляр класса Window передавая её в параметры:

    win = new Window (ui);

    На построение интерфейса ушла львина доля времени, так как скрипт писал на ноутбуке, не умеющем запускать exe файлы, и приходилось бегать от компьютера к компьютеру, плюс CSUIB, грубо говоря, не совсем стабильна:) Но это лирика, идём дальше.

    Думаю вы уже обратили внимание на ужасную структуру кода — так вот перестаньте обращать на это внимание:)
    После построения интерфейса случился ещё один останов — почему то не вызывались обработчики кнопок. Видимо из-за времени и усталости я не сразу понял, что если поставить обработчик события позже появления окна — то его вызова не будет, вплоть до закрытия окна.

    Кстати, до сих пор не знаю по какому принципу на форме выбирается кнопка «submit» — видимо по тексту(«OK», «Cancel»). Разобраться не успел — если в подскажете решение, буду благодарен.

    Другая львиная часть времени ушла на… проверку незаполненности формы. Просто после нажатия на кнопку OK окно больше появляться не собиралось, и пришлось переопределять его экземпляр. Но при этом стирались значения, которые пользователь всё же успел ввести. Быстро сохранив во временные переменные значения TextEditов я столкнулся с непониманием как сохранить значение DropDownList. Опять же в гайдах эдоби тишина, решение которое сработало заставляет меня плакать каждый раз при виде его.

    for (var i=0,len=stringList.length-1;i<len;i++)
    {
    if (String(win.pnl.alignDDL.items[i])==tmpDDL)
    {
    win.pnl.alignDDL.selection=win.pnl.alignDDL.items[i];
    }
    }


    Опять же переопределение окна скидывало все обработчики событий(что вполне естественно) и я для удобства включил их определение в функцию, хотя, конечно, стоило бы вынести и потом просто передавать их указатель.

    Вообще сейчас, утром, я вижу как и что сделать красиво и правильно, надеюсь выкрою время и всё переделаю.

    В комментариях хотелось бы услышать вопросы и свои шишки, а не предложения по коду:)
    Спасибо за внимание.

    PS: плюсы dzhuff, на основе его кода делался мой(:
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 28

      0
      Интересная тема, пытался программировать, но пока остановился на единственном скрипте ресайза фотографии (http://jour.me/programming/photoshop-js-resize/). Буквально на днях была еще одна идея, но никак не мог найти способ получить цвет пикселя по заданным координатам.

      Перерыл всю документацию, нашел только как получить foreground и background. Видимо надо что-то мудрить с eyedropper.
      0
      Было бы интересно услышать какое-то сопоставление с графическими билиотеками типа ImageMagick. Грубо говоря, в чём преимущество писать под фотошоп, вместо того, чтобы использовать готовые графические билиотеки?
        0
        Думаю что первое, и главное преимущество — большая целевая аудитория. Возможно я не прав:)
          0
          Не очень понятно, что именно планируется «сопоставлять»
          0
          Помню, надо было сделать кучу однотипных операций с 200 изображениями. Попытался разобраться в написании скрипта, в итоге забил, сделал все ручками, вышло быстрее.
            0
            возможно вым помог бы XnView
            там такие вещи хорошо продуманы, и тоже скрипты доступны
            хотя многие пишут насколь хорош в этом гимп (написании сриптов) но сам не пробовал — чуть ли не единственное явно преимущество перед фотошопом))
            • НЛО прилетело и опубликовало эту надпись здесь
              +2
              А обыкновенный Action не помог, или задача специфическая?
                +1
                В том же Photoshop есть такая фишка как batch-операции. Как раз предназначена для пакетной обработки файлов.
                Помнится таким образом делал resize примерно 3500 фотографий.

                Настроил откуда брать фото, с каким именем и куда сохранять, и какой action использовать (Action для ресайза создал заранее по требуемым параметрам).

                Запустил и ушел пить чай. Спустя примерно час-полтора всё было уже готово.
                  0
                  Не хочу вдаваться в пустую дискуссию, но если часть из этих фотографий портретные, часть ланшафтные и каждые нужно отресайзить на разные размеры, вручную отбирать по типам? И action здесь не поможет т. к. там нет условий. Я хочу сказать, что для каждой задачи нужно выбирать свой инструмент.
                    0
                    Вам подкинуть пример скрипта с экшном для решения задачи о «вертикальный/горизонтальный»? :)
                      0
                      А давайте, посмотрю ради расширения кругозора :-)
                        0
                          0
                          Спасибо, но почему-то я ожидал увидеть чистый action ;-) Посмотрите ссылку в первом комментарии, по-моему чистый javascript в данном случае более удобен, чем тандем скрипт-экшен — скрипт легче подредактировать, например, хотя бы под разные размеры фотографий, да и вообще, мы же программисты, нам можно! :-)
                            0
                            По ссылке всё написано, почему и для чего.
                0
                Надо бы написать статью о том, как на школьном уроке «про arj» мы qbasic мучили…
                  0
                  batch-операции, так же как и actions, инструмент мощный, но иногда не достаточный.
                  Я пытался использовать скрипты, но очень сложно без хороших примеров. Профи это может и не надо, а вот на моем уровне такие вещи необходимы. Хороший скрипт, продолжайте!
                    0
                    У меня один товарищ писал полдня скрипт в 200Кб, который бы склеивал картинки (около сотни),
                    честно украденные с онлайн карты.
                    Нужно было их особым образом составить и наложить.
                    Адоб работал несколько минут, мой скрипт на питоне (0,5 кб) справился за 9 секунд.
                    Вот такая история из жизни
                      0
                      Это вы к чему пример привели? :)
                        0
                        к тому, что всё хорошо к месту.
                        зачастую может оказаться, что быстрее сделать с нуля на языке, который уже знаком.
                          0
                          Крайне не показательный пример, не находите?
                          Если человеку для того, чтобы склеить в фотошопе сотню картинок понадобилось городить 200КБ скрипта, то это лишь пример его некомпетентности в данном вопросе, и не более того. К эффективности/удобству (и так далее) photoshop script это не имеет абсолютно никакого отношения.

                            0
                            Насколько я знаю там был жесткий копипаст, видимо поэтому всё так разрослось.
                            А пример какой уж есть. Просто история из жизни.
                              0
                              «Насколько я знаю там был жесткий копипаст»
                              То есть вы определённо знаете о, так сказать, никакой квалификации персонажа, и всё равно считаете это примером? :)
                                0
                                Нет, парень неплохой программист, не было у него желания глубоко ковыряться.
                                Посмотрел, какие скрипты фотошоп нагенерил и размножил под свои нужды. Скорость для него была не важна.
                                  0
                                  Ну так тогда тем более не ясно, нафига сравнивать заведомую халтуру с целенаправленным рукоделием?
                      0
                      По автоматизации работы в фотошопе есть одна книжка, автор — С. Царик «Автоматизация фотошоп CS2 на 100%»
                        0
                        Странно, что этот скрипт на 36–46% (разные программы сравнения показывают разные числа) совпадает с моим (статья на Демиарте), не считая переведенных на английский комментариев. Удивительное совпадение имен переменных и целых строк кода мне понравилось больше всего.
                        Из замечаний по коду хотелось бы увидеть информацию о авторе, которая была в первом скрипте.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое