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

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

3 ответа3

2

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

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

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

1

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

Например:

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

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

0

Я написал скрипт в Matlab, который решает проблему: он читает все изображения в каталоге и добавляет черное поле для достижения желаемого соотношения сторон.

% 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .