Автоматически добавлять пустые поля к изображениям, чтобы получить соотношение сторон 4x5?

1640
Bojack

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

Мне нужно сделать это для нескольких картинок, так что я могу использовать скрипт / макрос? Вы можете предложить решение на основе Photoshop.

0
Какие форматы файлов изображений задействованы? martineau 13 лет назад 0

3 ответа на вопрос

2
martineau

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

В справке Photoshop есть много информации о них. В Интернете также есть множество бесплатных программ для всех видов задач, поэтому меня не удивит, если есть такая, которая делает то, что вы хотите ... или близка к этому. Если нет, то, что вы хотели бы сделать, звучит довольно легко, так что, вероятно, не будет так сложно создать свой собственный (при условии, что вы знаете, как это сделать в программе). Кроме того, вы можете скачать бесплатную программу, близкую к вашей цели или подобную ей, и отредактировать (изменить) ее.

Обновление: я нашел это веб-руководство по созданию собственных действий - Как: обрезать 10 или более изображений до определенного размера, используя действия и пакетную обработку в Adobe Photoshop .

Чтобы немного расширить это: поскольку конечным результатом являются физические отпечатки, один из вариантов состоит в том, чтобы взять все фотографии в альбомной ориентации (или горизонтальные), повернуть их на 90 градусов и затем сохранить как временную копию. Таким образом, все фотографии, которые вы отправляете на сервис, имеют одну ориентацию. Если ваши фотографии не 4x5 (или 8x10) для начала, вы можете взять все фотографии и применить к ним одно преобразование, чтобы они были все 5 дюймов в ширину. Тогда автообрезка не будет обрезать их. После того, как вы выясните свой рабочий процесс, действия могут быть автоматизированы, как предложил Мартино. horatio 13 лет назад 0
1
Dennis Williamson

Вы можете сделать это с помощью инструмента командной строки, который является частью ImageMagick . Он доступен для Unix / Linux, OS X и Windows.

Например:

convert *.jpg -bordercolor white -border +10+10 %t-4x5.%e 

Добавляет 10-пиксельную рамку вокруг изображения. Чтобы заполнить пропорции, все должно быть немного сложнее. Вот скрипт Bash, который использует ImageMagick, чтобы делать то, что вы хотите: aspectpad .

0
Bojack

I wrote a script in Matlab that solves the problem: It reads all the images in the directory and adds a black margin to achieve the desired aspect ratio.

% Margins % SPECIFY RATIO RATIO_HEIGHT = 10; RATIO_WIDTH = 8; % READ FILES files = dir('*.jpg'); % START clc for f=1:size(files) % READ FILE IMG = imread(files(f).name); [h w d] = size(IMG); % CALCULATE RATIO ratio = w/h; % PRINT FILENAME fprintf('\n\n-------------------------------------'); fprintf('\n# PROCESSING FILE: \t%s', files(f).name); % PRINT ORIENTATION if(h > w) orientation = 1; fprintf('\nPORTRAIT'); else orientation = 2; fprintf('\nLANDSCAPE'); end % PRINT DIMENSIONS fprintf('\t|\t%i x %i', h, w); % CHECK RATIO? if(h/w == RATIO_HEIGHT/RATIO_WIDTH) fprintf('\n > Correct aspect ratio.'); NIMG = IMG; else fprintf('\n! BAD aspect ratio : %f', h/w); % CALCULATE NEW DIMENSIONS if(ratio < RATIO_WIDTH/RATIO_HEIGHT) ch = h; cw = round(RATIO_WIDTH/RATIO_HEIGHT*ch); else cw = w; ch = round(RATIO_HEIGHT/RATIO_WIDTH*cw); end % PRINT NEW DIMENSIONS fprintf('\nNEW DIMENSIONS: \t%i x %i | ADDED: %i x %i', ch, cw, ch-h, cw-w); % CREATE NEW IMAGE NIMG = uint8(zeros(ch,cw,d)); % COPY for k=1:d for i=1:h for j=1:w NIMG(i,j,k) = IMG(i,j,k); end end end end % WRITE imwrite(NIMG, ['modified\' files(f).name '.png'], 'png'); end