Гид по технологиям

Автоматизация Photoshop: скрипты на JavaScript

7 min read Photoshop Обновлено 28 Apr 2026
Автоматизация Photoshop: скрипты на JavaScript
Автоматизация Photoshop: скрипты на JavaScript

Изображение рабочего процесса Photoshop и скриптов

Photoshop — мощный инструмент для редактирования изображений, и автоматизация значительно ускоряет рутинные задачи. Мы уже рассматривали, как создавать логотипы и исправлять пересветы; следующий шаг — автоматизация. Если вы знакомы с Photoshop Actions, то знаете базовую автоматизацию. Скрипты Photoshop дают больше гибкости: они написаны на JavaScript и позволяют изменять поведение во время выполнения — то, чего Actions не умеют.

Если вы фанат GIMP или не хотите платить за Photoshop, посмотрите наш гид по автоматизации GIMP скриптами (вторичный вариант подхода).

Важно: скрипты Photoshop пишутся в ExtendScript (вариант JavaScript для приложений Adobe). ExtendScript поддерживает диалоговые окна, файловые операции и прямой доступ к объектам документа Photoshop.

Что понадобится

  • Установленный Photoshop (любая современная версия; названия версий могут отличаться).
  • ExtendScript Toolkit (входит в подписку Creative Cloud) или любой текстовый редактор по вкусу (Sublime Text, VS Code и т. п.).
  • Базовые знания JavaScript полезны, но не обязательны.

Кратко: ExtendScript Toolkit удобен тем, что поддерживает точки остановки (breakpoints) и консоль отладки.

Ваш первый скрипт: изменение размера изображений

Откройте ExtendScript Toolkit и убедитесь, что в нем выбран целевой продукт — Adobe Photoshop вашей версии. Интерфейс может выглядеть устаревшим, но он работает.

Интерфейс ExtendScript Toolkit с панелями и консолью

Скопируйте и вставьте этот код в основное окно редактора (левое):

current_document = app.activeDocument;  
new_width = 670;  
  
current_document.resizeImage(  
  UnitValue(new_width, 'px'),  
  null,  
  null,  
  ResampleMethod.BICUBIC  
);

Пояснение одной строкой: current_document получает активный документ Photoshop; new_width задаёт желаемую ширину в пикселях; resizeImage меняет размер с указанием метода ресэмплинга.

Ключевые моменты:

  • Если Photoshop не запущен или не открыт документ, выражение app.activeDocument вызовет исключение. Исключения останавливают выполнение.
  • UnitValue(new_width, ‘px’) переводит значение в единицы, понятные API.
  • ResampleMethod — перечисление методов ресэмплинга (см. ниже).

Есть пять основных методов ресэмплинга. Выберите в зависимости от задачи:

  1. Nearest Neighbor — очень быстро, качество минимальное.
  2. Bilinear — чуть лучше, но уступает Bicubic.
  3. Bicubic — хорошее качество, медленнее.
  4. Bicubic Smoother — улучшенный Bicubic для увеличения изображений.
  5. Bicubic Sharper — улучшенный Bicubic для уменьшения (downsampling).

Запуск скрипта в ExtendScript Toolkit

  1. Убедитесь, что Photoshop открыт вместе с документом.
  2. В верхнем левом раскрывающемся списке “Target” выберите вашу версию Adobe Photoshop (например, “Adobe Photoshop CC 2017” или современную версию).
  3. Нажмите кнопку “Play” (Выполнить) в правой части панели инструментов.

Если всё прошло успешно, изображение изменит размер. Консоль JavaScript в правой части Toolkit покажет вывод. Если нет вывода — вы увидите “Result: undefined”.

Результат в консоли ExtendScript Toolkit

Если возникла ошибка, Toolkit выделит строку (примерно) и покажет оранжевую полосу с сообщением. Остановите выполнение (Stop) и проверьте:

  • код на опечатки;
  • что Photoshop запущен;
  • что открыт документ.

Как запускать скрипты из Photoshop

Сохраните скрипт в файле с расширением .jsx. По умолчанию Toolkit предлагает папку Presets/Scripts в установке Photoshop.

В Photoshop есть несколько способов запустить скрипт:

  • Файл > Скрипты > Обзор (File > Scripts > Browse) — выбрать файл и сразу выполнить.
  • Разместить .jsx в папке Presets/Scripts и перезапустить Photoshop — скрипт появится в меню Файл > Скрипты.
  • Файл > Скрипты > Диспетчер событий скриптов (Script Events Manager) — привязать выполнение скрипта к событию (открытие документа, печать и т.д.).

Окно Диспетчера событий скриптов

Диспетчер событий позволяет:

  1. Выбрать событие Photoshop, при котором будет запускаться скрипт (например, при открытии документа).
  2. Указать конкретный скрипт.
  3. В качестве альтернативы — выбрать действие (Action), если не нужен скрипт.

После настройки нажмите “Add” (Добавить) и затем “Done” (Готово).

Если хотите, чтобы скрипт был видим в меню, поместите .jsx в Presets > Scripts и перезапустите Photoshop.

Меню Скриптов в Файл > Скрипты

Улучшаем код: не масштабировать вверх и правильно ресэмплировать

Исходный код хорошо работает для простого уменьшения до 670px, но он увеличит мелкие картинки, ухудшая качество. Добавим условие, проверяющее ширину документа:

current_document = app.activeDocument;  
new_width = 670;  
  
if(current_document.width > new_width) {  
  current_document.resizeImage(  
    UnitValue(new_width, 'px'),  
    null,  
    null,  
    ResampleMethod.BICUBIC  
  );  
}

Мы обернули вызов resizeImage в if — теперь маленькие изображения пропускаются.

Добавим финишную обработку: используем Bicubic Sharper при уменьшении и применим авто-контраст и резкость:

current_document = app.activeDocument; // Get the active document  
new_width = 670; // new width to ressize to  
  
if(current_document.width > new_width) {  
  // if document is larger than new size  
  current_document.resizeImage(  
    UnitValue(new_width, 'px'),  
    null,  
    null,  
    ResampleMethod.BICUBICSHARPER  
  );  
}  
  
current_document.activeLayer.autoContrast(); // Apply contrast  
current_doc.activeLayer.applySharpen(); // Apply Sharpen

Совет: закомментируйте или отключайте авто-эффекты при пакетной обработке, если позже хотите вручную проверять качество.

Важно: методы автоконтраста и резкости применяются к активному слою. Если у вас слои сложного состава, сначала объедините слой для предсказуемого результата.

Диалог для пользователя: задаём ширину при запуске

Чтобы позволить пользователю вводить значение ширины при запуске, используйте prompt:

current_document = app.activeDocument;  
new_width = parseInt(prompt('Введите желаемую ширину в пикселях:', '670'), 10);  
  
if(!isNaN(new_width) && current_document.width > new_width) {  
  current_document.resizeImage(  
    UnitValue(new_width, 'px'),  
    null,  
    null,  
    ResampleMethod.BICUBICSHARPER  
  );  
}

Примечание: prompt возвращает строку; parseInt превращает её в число. Всегда проверяйте isNaN, чтобы избежать ошибок.

Пакетная обработка папки изображений (пример)

Ниже упрощённый шаблон для обработки всех файлов изображения в выбранной папке (открытие, применение ресайза, сохранение как JPEG):

var inputFolder = Folder.selectDialog('Выберите папку с изображениями');
if(inputFolder != null) {
  var files = inputFolder.getFiles(/
\.(jpg|jpeg|png|tif|tiff)$/i);
  for(var i = 0; i < files.length; i++) {
    var file = files[i];
    var doc = app.open(file);
    // Применяем изменения, например, уменьшаем до 1200px
    var targetWidth = 1200;
    if(doc.width > targetWidth) {
      doc.resizeImage(UnitValue(targetWidth, 'px'), null, null, ResampleMethod.BICUBICSHARPER);
    }
    // Сохраняем в подпапку "export"
    var exportFolder = new Folder(inputFolder + '/export');
    if(!exportFolder.exists) exportFolder.create();
    var saveFile = new File(exportFolder + '/' + doc.name.replace(/\.[^\.]+$/, '') + '.jpg');
    var jpgSaveOptions = new JPEGSaveOptions();
    jpgSaveOptions.quality = 8;
    doc.saveAs(saveFile, jpgSaveOptions, true, Extension.LOWERCASE);
    doc.close(SaveOptions.DONOTSAVECHANGES);
  }
}

Этот шаблон показателен: он иллюстрирует выбор папки, перебор файлов, открытие, изменение размера, сохранение и закрытие без сохранения исходного документа.

Важно: в названиях файлов и путях учитывайте кодировку и разрешения; на разных ОС возможны отличия.

Отладка и логирование

  • Используйте ExtendScript Toolkit, чтобы ставить точки останова и следить за переменными.
  • console.log в ExtendScript Toolkit заменяется выводом в JavaScript Console (Toolkit автоматически показывает result/ошибки).
  • Добавляйте try/catch вокруг критических блоков и выводите сообщения через alert() или $.writeln() для логов.

Пример try/catch:

try {
  // ваш код
} catch(e) {
  alert('Ошибка: ' + e.message);
}

Когда скрипты не подходят (контрпримеры)

  • Если задачи требуют редакторского решения (тонкая ретушь, художническая правка), автоматизация не заменит ручную работу.
  • Если документы сильно различаются по структуре слоёв и масок, универсальный скрипт будет ошибаться.
  • Для интерактивной работы с множеством ручных правок лучше использовать Actions + ручную донастройку, а не полностью автоматическую обработку.

Альтернативные подходы

  • Actions (Действия): легко записываются, подходят для линейных последовательностей, но не поддерживают логику ветвления и диалоги.
  • Droplets: упакованные Actions, исполняемые перетаскиванием файлов на ярлык.
  • GIMP + Script-Fu: бесплатная альтернатива; синтаксис и возможности отличаются.

Ментальные модели и хакерская проверка качества

  • Сделайте правило «не увеличивать изображение» по умолчанию.
  • Для уменьшения используйте Bicubic Sharper.
  • Для увеличения — Bicubic Smoother.
  • Разделяйте шаги: изменение размера → корректировка контраста → сохранение. Это проще тестировать.

Роли и чек-листы

Для командной работы разделите обязанности:

  • Дизайнер: проверяет тестовые результаты на контрольной выборке.
  • Разработчик скриптов: пишет и отлаживает код.
  • QA: запускает пакетную обработку на тестовой папке и проверяет качества.

Чек-лист перед запуском на проде:

  • Резервная копия исходных файлов.
  • Тестовая папка с разнообразными изображениями.
  • Параметры сохранения (формат, качество) проверены.
  • Скрипт работает без исключений на тестовой выборке.

Шаблоны и пресеты (быстрый чек-лист)

  • Папка Presets/Scripts — для доступа через меню Photoshop.
  • Версия Photoshop — убедитесь, что скрипт совместим с вашей версией API.
  • Локализация: в текстовых диалогах используйте язык аудитории.

Критерии приёмки

  • Скрипт корректно обрабатывает 95% тестовой выборки без визуальных артефактов.
  • Размер выходных изображений соответствует техническому заданию.
  • Сохранение проходит без потери метаданных, если это требование проекта.

Модель принятия решений (Mermaid)

flowchart TD
  A[Нужно изменить размер?] -->|Да| B{Изображение больше цели?}
  A -->|Нет| G[Нет действий]
  B -->|Да| C[Уменьшить: Bicubic Sharper]
  B -->|Нет| D{Увеличивать?}
  D -->|Да| E[Увеличить: Bicubic Smoother]
  D -->|Нет| F[Пропустить]
  C --> H[Применить авто-контраст/шарп]
  E --> H
  H --> I[Сохранить]

Совместимость и миграция

  • Методы и объекты Photoshop Scripting API стабильны, но могут меняться между крупными версиями. Тестируйте скрипты при обновлении Photoshop.
  • ExtendScript Toolkit может быть заменён на VS Code с плагинами, но Toolkit даёт встроенную консоль и отладчик.

Безопасность и GDPR (если применимо)

  • Скрипты, которые автоматически выгружают изображения на удалённые сервера, должны обрабатывать пользовательские данные в соответствии с политикой конфиденциальности.
  • Всегда информируйте пользователей и собирайте согласие, если скрипт передаёт файлы вне локальной сети.

Типичные ошибки и их исправление

  • “app.activeDocument undefined”: нет открытого документа или Photoshop не подключён.
  • Ошибки при сохранении: проверьте права доступа к папке и корректность путей.
  • Неверные имена файлов: учитывайте символы, недопустимые в файловой системе.

Быстрый справочник (cheat sheet)

  • Открыть файл: app.open(new File(‘/путь/к/файлу’))
  • Получить активный документ: app.activeDocument
  • Изменить размер: doc.resizeImage(UnitValue(800, ‘px’), null, null, ResampleMethod.BICUBICSHARPER)
  • Сохранить JPEG: doc.saveAs(file, new JPEGSaveOptions(), true, Extension.LOWERCASE)
  • Закрыть без сохранения: doc.close(SaveOptions.DONOTSAVECHANGES)

1‑строчный глоссарий

  • ExtendScript: вариант JavaScript для приложений Adobe.
  • JSX: расширение файла скрипта Photoshop.
  • ResampleMethod: метод ресэмплинга при изменении размера.

Что дальше?

Начните с простого скрипта для одного изображения. Протестируйте на 20–50 файлах разного размера и формата. Затем добавляйте функции: выбор целевой ширины, обработка папок, сохранение вариантов (web/print), логирование и обработка ошибок.

Важно: автоматизация — это инструмент для ускорения рутинной работы. Она экономит время, но требует тестирования и контроля качества.

Если вам понравился этот материал — поделитесь своими скриптами и идеями в комментариях. Какие задачи вы хотели бы автоматизировать в первую очередь?

Image Credit: whiteMocca via Shutterstock.com

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как посмотреть историю местоположений в Google Maps
Технологии

Как посмотреть историю местоположений в Google Maps

Пароль на историю поиска Google — как включить
Конфиденциальность

Пароль на историю поиска Google — как включить

Исправить битый пиксель на ЖК‑экране
Аппаратное обеспечение

Исправить битый пиксель на ЖК‑экране

Кастомный ISO Ubuntu с Cubic — шаг за шагом
Linux

Кастомный ISO Ubuntu с Cubic — шаг за шагом

Как организовать фототеку: ошибки и готовый план
Фотография

Как организовать фототеку: ошибки и готовый план

Как настроить iCloud на Mac
Mac

Как настроить iCloud на Mac