Скрипт для Photoshop - изменение размера с учетом ориентации

Всего 82 сообщ. | Показаны 1 - 20
Скрипт для Photoshop - изменение размера с учетом ориентации
При создании экшенов очень часто возникает проблема определения ориентации изображения. Из-за этого приходится делать по две копии всех экшенов: отдельно для вертикальных изображений, отдельно для горизонтальных.

Предложенный ниже нехитрый скриптик позволяет частично решить эту проблему. С его помощью можно изменить размер изображения с учетом ориентации. Размер жестко прописан в скрипте. На мой взгляд проще всего сделать несколько копий скрипта, предназначенных для разных стандартных размеров.

Скрипт можно запускать как сам по себе, так и использовать его в экшенах.


#target photoshop

// Размер изображений (короткая сторона, длинная сторона)
var IMG_SIZE = new Array(1181,1772);

var rlUnt = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
try
{

var doc = app.activeDocument;
doc.resizeImage
(
IMG_SIZE[(doc.width < doc.height)?0:1],
IMG_SIZE[(doc.width < doc.height)?1:0]
);
doc = null;

}
finally
{
app.preferences.rulerUnits = rlUnt;
}
rlUnt = null;
IMG_SIZE = null;

Re[Игорь Гурьянов]:
Поздравляю с изобретением велосипеда. Но можно сделать и проще: File-Automate-Fit Image.
Re[Игорь Гурьянов]:
Я писал для себя аналогичный скрипт, правда фиксируя только размер длинной стороны:
app.preferences.rulerUnits = Units.PIXELS;
var targetlength = 1280; //требуемая максимальная длина или высота
var dpi = 300// разрешение пикселей/дюйм
var k1 = (app.activeDocument.height) / (app.activeDocument.width) * targetlength;
var k2 = (app.activeDocument.width) /(app.activeDocument.height) * targetlength;
if (app.activeDocument.width>app.activeDocument.height) {
app.activeDocument.resizeImage(targetlength, k1, dpi,);}
else {app.activeDocument.resizeImage(k2, targetlength, dpi,);};

Вообще-то fit image подгоняет размер изображения для веба (снимки с разной ориентацией будут иметь разный размер по длинной стороне), а для печати действительно нужен подобный скрипт.
Re[bc----]:
от: bc----
Поздравляю с изобретением велосипеда. Но можно сделать и проще: File-Automate-Fit Image.
Всё бы хорошо, да иногда при ресайзе с сохранением пропорций из-за погрешностей округления теряются пикселы. Например вместо 1181х1772 пикселей может получиться 1181х1771. Для меня это критично, поэтому "фит имидж" к моему большому сожалению никак не подходит. Поэтому пришлось изобретать велосипед :)
Re[Игорь Гурьянов]:
от:Игорь Гурьянов
Всё бы хорошо, да иногда при ресайзе с сохранением пропорций из-за погрешностей округления теряются пикселы. Например вместо 1181х1772 пикселей может получиться 1181х1771. Для меня это критично, поэтому "фит имидж" к моему большому сожалению никак не подходит. Поэтому пришлось изобретать велосипед :)
Подробнее

Значит надо вставлять блок проверки на целочисленность - если не делится на целое число, то перед ресайзом подрезать на n пикселей.
Re[Alf-Romeo]:
от: Alf-Romeo
Значит надо вставлять блок проверки на целочисленность - если не делится на целое число, то перед ресайзом подрезать на n пикселей.
Куда вставлять? Речь была о File-Automate-Fit Image. А в моем скрипте таких проблем нет, потому как размеры не вычисляются, а жестко задаются.
Re[Игорь Гурьянов]:
от: Игорь Гурьянов
Куда вставлять? Речь была о File-Automate-Fit Image. А в моем скрипте таких проблем нет, потому как размеры не вычисляются, а жестко задаются.

Хорошо, этот блок вставлю в свой скрипт. :)
Насколько я понял, вы готовы пожертвовать пропорциями сторон ради жестких границ по обеим сторонам.
Если не секрет, для какого рода задач важнее жестко закрепленные обе границы, чем пропорции снимка? Особенно если учесть что такие изменения (типа изменить все изображение (не холст) на 1 пиксель) негативно сказываются на резкости.
Re[Игорь Гурьянов]:
от:Игорь Гурьянов
Всё бы хорошо, да иногда при ресайзе с сохранением пропорций из-за погрешностей округления теряются пикселы. Например вместо 1181х1772 пикселей может получиться 1181х1771. Для меня это критично, поэтому "фит имидж" к моему большому сожалению никак не подходит. Поэтому пришлось изобретать велосипед :)
Подробнее


Просто любопытства ради - а для каких задач изменение стороны на 1 пиксель критично?
Re[bc----]:
...
Re[bc----]: Re[Alf-Romeo]:
от: bc----
Просто любопытства ради - а для каких задач изменение стороны на 1 пиксель критично?
1) Иногда приходится обработать фотографию аналогично ранее уже обработанной. Поэтому некоторые элементы обработки (проще говоря готовые слои) просто копирую. При этом если размеры не совпадают (даже на пиксел), то на изображении могут появиться по краям ненужные полосы.

2) Иногда в скриптах по размеру изображения определяю кой-какие параметры.

3) Просто люблю порядок :) Другим не навеливаю, но сам не поленюсь наваять скриптик в десять строчек чтобы одинаковые фотки имели действительно одинаковый размер :)

от:Alf-Romeo
Насколько я понял, вы готовы пожертвовать пропорциями сторон ради жестких границ по обеим сторонам.
Если не секрет, для какого рода задач важнее жестко закрепленные обе границы, чем пропорции снимка? Особенно если учесть что такие изменения (типа изменить все изображение (не холст) на 1 пиксель) негативно сказываются на резкости.
Подробнее
Про жесткие размеры я ответил выше. Про пропорции: пропорции конечно важны, но ужав, например, фотку с разрешения 3004х2000 до 3000х2000 искажение пропорций навряд ли кто-то заметит :) Ну и естественно я не ужимаю фотку с пропорциями 3х4 до размеров с пропорциями 2х3 :))
Re[Игорь Гурьянов]:
от:Игорь Гурьянов
Про жесткие размеры я ответил выше. Про пропорции: пропорции конечно важны, но ужав, например, фотку с разрешения 3004х2000 до 3000х2000 искажение пропорций навряд ли кто-то заметит :) Ну и естественно я не ужимаю фотку с пропорциями 3х4 до размеров с пропорциями 2х3 :))
Подробнее

Я бы предпочел отрезать четыре пикселя от холста, чем так ресайзить. Хотя, конечно, если надо размыть регулярную структуру, можно и так.
Re[Игорь Гурьянов]:
от:Игорь Гурьянов
При создании экшенов очень часто возникает проблема определения ориентации изображения. Из-за этого приходится делать по две копии всех экшенов: отдельно для вертикальных изображений, отдельно для горизонтальных.
Подробнее
Не, на самом деле плодить создавать две копии экшена не надо. Надо просто добавить в него несколько дополнительных действий:

1. открываем файл
2. создаём новый слой из бэкргаунда
3. копируем его
4. поворачиваем новый слой на 90 градусов
5. делаем reveal all - новый размер canvas будет равен наибольшей стороне
6. делаем ресайз до нужного размера по длинной стороне
7. удаляем верхний слой
8. Ctrl+click на оставшийся слой
9. Crop

Re[Criminally Insane]:
от:Criminally Insane
Не, на самом деле плодить создавать две копии экшена не надо. Надо просто добавить в него несколько дополнительных действий:

1. открываем файл
2. создаём новый слой из бэкргаунда
3. копируем его
4. поворачиваем новый слой на 90 градусов
5. делаем reveal all - новый размер canvas будет равен наибольшей стороне
6. делаем ресайз до нужного размера по длинной стороне
7. удаляем верхний слой
8. Ctrl+A
9. Crop
Подробнее

Изящно, только в конце вместо crop может trim или я чего-то не понял?
Re[Criminally Insane]:
Век живи - век учись! Интересный вариант :) Спасибо!! :)
Re[Alf-Romeo]:
от: Alf-Romeo
Изящно, только в конце вместо crop может trim или я чего-то не понял?
По-моему, команда называется Crop to selection - у меня на работе нету фотошопа...
Re[Criminally Insane]:
от: Criminally Insane
По-моему, команда называется Crop to selection - у меня на работе нету фотошопа...

У меня на работе есть, но он не работает . Кстати, надо будет посмотреть эту команду (для других целей), но что-то у меня есть сомнения, что откропится то, что надо.
Re[Criminally Insane]:
от: Criminally Insane
Не, на самом деле плодить создавать две копии экшена не надо. Надо просто добавить в него несколько дополнительных действий:
...

Не, на самом деле не надо никаких дополнительных действий добавлять!
Почему в экшне просто не прописать один шаг — ресайз в процентах с сохранением пропорций? Проценты можно и в виде десятичной дроби задавать. Ну и ничто не мешает "сделать несколько копий скрипта, предназначенных для разных стандартных размеров", как предлагает автор. ;)
Re[l0adr]:
от:l0adr
Не, на самом деле не надо никаких дополнительных действий добавлять!
Почему в экшне просто не прописать один шаг — ресайз в процентах с сохранением пропорций? Проценты можно и в виде десятичной дроби задавать. Ну и ничто не мешает "сделать несколько копий скрипта, предназначенных для разных стандартных размеров", как предлагает автор. ;)
Подробнее

Ага, а если на входе разные размеры, а на выходе должен быть один размер?
Re[Alf-Romeo]:
от: Alf-Romeo
У меня на работе есть, но он не работает . Кстати, надо будет посмотреть эту команду (для других целей), но что-то у меня есть сомнения, что откропится то, что надо.
Извините, я ошибся в п.8 должно быть не Ctrl+A (select all), а Ctrl+щёлк по слою в палитре Layers, т.е. выделение всего содержимого этого слоя.
Re[Игорь Гурьянов]:
Что-то у меня reveal all не работает. Может я чего делаю не так?