Скрипт добавления логотипа в каждую картинку

Я не буду рассказывать в этом уроке, насколько скрипты в Adobe Photoshop упрощают жизнь, об этом можно почитать в моем предыдущем уроке. Здесь я опишу создание более сложного скрипта, который добавляет ваш логотип на изображения, находящиеся в заданной папке.
Для чего это нужно? Например, выставление копирайта на множество картинок для усложнения их кражи. Я думаю, многие замечали на сайтах уроков, развлечений, магазинов значки обозначающие принадлежность конкретного изображения сайту.
Особенности:
  • Логотип может быть следующих форматов: PNG, GIF, JPG.
  • С помощью диалогового окна задается прозрачность логотипа.
  • Можно располагать логотип по центру, справа сверху и снизу.
  • Качество JPEG задается равное 9.
  • Скрипт закрывает все открытые документы, измененные предлагает сохранить.
Файл скрипта

Пример использования скрипта. Принтскрин диалогового окна с логотипом.
Скрипт добавления логотипа в каждую картинку

Что нового в уроке? В данном скрипте использовалось выпадающее меню, массивы точек выделения, закрытие всех диалоговых окон до начала работы, открытие файла, имеющего одно из трех расширений (PNG, GIF, JPG), изменение пути к файлу посредством редактирования поля ввода, копирование выделения, а также вставка в область выделения.
Ниже разберем код. Все указания, которые совпадают с предыдущим уроком будут выделены серым цветом.

Определяем программу, для которой написан скрипт. Переключаемся в Photoshop.
CODE
#target photoshop
app.bringToFront();

Задаем единицы измерения — пиксели
CODE
var sRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;

Закрываем все открытые документы.
CODE
while (app.documents.length)
 {
   app.activedocument.close()
 }

Создаем диалоговое окно для ввода параметров. Ниже описаны координаты диалогового окна и всех элементов, которые на нем находятся, а именно: заголовок окна, 2 кнопки, 4 надписи, 2 строки для ввода значений и один выпадающий список.
CODE
var ui =
"dialog{text:'Text watermark settings',bounds:[100,100,490,300],\
 button0:Button{bounds:[270,20,370,40] , text:'OK' },\
 button1:Button{bounds:[270,50,370,70] , text:'Cancel' },\
 edittext0:EditText{bounds:[30,40,240,60] , text:'' ,properties:{multiline:false,noecho:false,readonly:false}},\
 edittext1:EditText{bounds:[30,150,65,170] , text:'' ,properties:{multiline:false,noecho:false,readonly:false}},\
 statictext0:StaticText{bounds:[30,20,240,40] , text:'Image copyright path' ,properties:{scrolling:false,multiline:false}},\
 statictext1:StaticText{bounds:[30,75,250,95] , text:'Choose location of copyright image' ,properties:{scrolling:false,multiline:false}},\
 statictext2:StaticText{bounds:[30,130,250,150] , text:'Opacity' ,properties:{scrolling:false,multiline:false}},\
 statictext3:StaticText{bounds:[70,150,150,170] , text:'1-100' ,properties:{scrolling:false,multiline:false}},\
 dropdown0:DropDownList{bounds:[30,95,180,120]}\
}";

Новое окно UI, расположить окно по центру экрана
CODE
var win = new Window (ui);
win.center();

Сохраняем текущие настроки показа диалоговых окон. Отключаем показ диалоговых окон.
CODE
var startDisplayDialogs = app.displayDialogs;
app.displayDialogs = DialogModes.NO;

Элементы выпадающего списка задаются следующим образом
CODE
var stringList = [];
stringList[1] = "Center";
stringList[2] = "Right Top";
stringList[3] = "Right Bottom";

Добавление заданных элементов в список.
CODE
var item
for (var i=1,len=stringList.length;i<len;i++)
{
  item = win.dropdown0.add ('item', stringList[i]);      
};

Открываем диалоговое окно для выбора логотипа.
CODE
var f_logo = File.openDialog("Open logo file", "PNG Files: *.PNG, GIF Files: *.GIF, JPEG Files: *.JPG");

Копируем путь отрываемого файла в поле для введения текста.
CODE
win.edittext0.text = f_logo.absoluteURI;

Открываем основное диалоговое окно скрипта при условии нажатия клавиши ОК
CODE
var ret = win.show();  // Показать диалоговое окно при условии...
win.button1.onClick = function()
{
 this.parent.close(0);
};
if (1 == ret) // ...при условии нажатия кнопки ОК
{

Открываем файл логотипа, считывая путь из поля для введения текста. В этом уроке поле ввода сделано специально для демонстрации возможности изменения пути к файлу, а также его считывания.
CODE
open(File(win.edittext0.text))

Узнаем ширину и высоту логотипа
CODE
var logo_width = app.activedocument.width.value;
var logo_height = app.activedocument.height.value;

Выделим все и скопируем
CODE
app.activedocument.selection.selectAll();
app.activedocument.selection.copy();

Ниже приведен уже знакомый многим код, предназначенный для задания исходной и целевой папки.
CODE
var inFolder = Folder.selectDialog("Open folder"); // Задаем исходную папку
var outFolder = Folder.selectDialog("Save images to"); // Задаем папку, куда сохранить измененные файлы
if (inFolder != null && outFolder != null)
{
 var ListOfFiles = inFolder.getFiles(); // Получить все файлы из папки
 var jpegOptions = new JPEGSaveOptions(); // Сохранить в  JPEG
 jpegOptions.quality = 9; // Задать качество JPEG
 for (var i = 0; i < ListOfFiles.length; i++) // Задаем количество повторений равное количеству выбранных файлов
  {
// Открываем только файлы текущей папки, игнорируем вложенные папки
   if (ListOfFiles[i] instanceof File && ListOfFiles[i].hidden == false)
    {
// Открываем следующий файл
     var docRef = open(ListOfFiles[i])


Обозначаем ширину и высоту для каждого документа в исходной папке
CODE
     var width = app.activedocument.width.value;
     var height = app.activedocument.height.value;

Проверяем значение, выбранное пользователем в выпадающем списке. В первом случае рассматривается „Центр“. Так как объект, скопированый в новый документ помещается по центру выделения, выделим весь документ.
CODE
if (win.dropdown0.selection.text == "Center")
{
 app.activedocument.selection.selectAll();
}

Если выбрано значение „Правый верхний угол“. Задаем выделение с помощью массивов точек. Координаты считаются начиная с левого верхнего угла изображения. При построении выделений состоящих из 4-х точек, можно воспользоваться следующей схемой.
Скрипт добавления логотипа в каждую картинку

CODE
else if (win.dropdown0.selection.text == "Right Top")
{
 var selectR = Array(Array(width — logo_width, logo_height),
 Array(width, logo_height),  
 Array(width, 0),
 Array(width — logo_width, 0),
 Array(width — logo_width, logo_height));
 app.activedocument.selection.select(selectR);
}

Аналогичным образом для позиции „Правый нижний угол“.
CODE
else if (win.dropdown0.selection.text == "Right Bottom")
{
 var selectR = Array(Array(width — logo_width — 5, height — 5),
 Array(width — 5, height — 5),
 Array(width — 5, height — logo_height  - 5),
 Array(width — logo_width — 5, height — logo_height — 5),
 Array(width — logo_width — 5, height — 5));
 app.activedocument.selection.select(selectR);
}

Вставляем логотип и задаем его прозрачность
CODE
app.activedocument.paste();
app.activedocument.activeLayer.fillOpacity = win.edittext1.text;

Сохранить под именем Result_1, Result_2, Result_3, ...
docRef.saveAs(new File(outFolder + "/Result_" + i + ".jpg"),jpegOptions);
Не вносить изменений в оригинальные файлы при закрытии
CODE
docRef.close(SaveOptions.DONOTSAVECHANGES);
}
}
 }
 app.activedocument.close();
  }

Возвращаем настройки показа диалоговых окон
CODE
app.displayDialogs = startDisplayDialogs;


Примечание:
Почему-то все надписи "activeDocument" тут отображаются как "activedocument", исправьте при копировании кода, так как регистр в JavaScript имеет значение. Вероятно, это как-то связано с тегом кода на форуме.

Автор: Dzhuffin_Hally

Присоединённый файл  Script_PS_img_Copyright.rar ( 2.79к ) Кол-во скачиваний: 3663


Это сообщение отредактировал Dzhuff — 6 Июня 2008, 01:44


Создаем спецэффекты

Вас может также заинтересовать:

18 июня 2019

Продвинутая зеркальная камера, которая станет превосходным выбором как для амбициозных новичков, так и для опытных фотоэнтузиастов. КМОП-сенсор 16 Мпикс., расширение светочувствительности до ISO 25600, поворотный ЖК-дисплей 3” (разрешение 920000 точек), режим Live View, 420-зонный цветной матричный экспозамер 3D, встроенные фильтры для спецэффектов, видеосъемка Full HD. В комплекте стандартный трехкратный зум АF-S DX NIKKOR 18-55mm f/3.5-5.6G и теоеобъектив AF-S DX NIKKOR 55-200.

18 июня 2019

18 июня 2019