自动为图片添加空白边距以获得 4x5 的宽高比?

自动为图片添加空白边距以获得 4x5 的宽高比?

我经常在线订购照片。但是打印服务是自动的,会将我上传的照片裁剪成 4x5 的比例。我希望能够在上传照片之前为照片添加边距(例如白色),这样照片的长宽比就是 4x5。

我需要对几张图片执行此操作,那么是否有可以使用的脚本/宏?您可以建议基于 Photoshop 的解决方案。

答案1

Photoshop 可以使用其所谓的“操作”编写脚本。它们很像宏,可以在程序中录制、编辑和播放。创建脚本后,可以手动对单个图像执行,也可以应用于文件夹中的所有图像。

Photoshop 的帮助中有大量关于它们的信息。网络上还有大量用于各种任务的免费程序,所以如果有一个可以满足您的要求或接近您的要求,我也不会感到惊讶。如果没有,您想要做的事情听起来相当简单,因此创建自己的程序可能并不难(假设您知道如何在程序中执行此操作)。或者,您可以下载一个接近或类似于您的目标的免费程序并编辑(修改)它。

更新:我找到了这个关于如何创建自己的动作的网络教程——如何:使用 Adob​​e Photoshop 中的操作和批处理将 10 张或更多图像裁剪为定义的大小

答案2

您可以使用命令行工具执行此操作,该工具是图像魔术师. 它适用于 Unix/Linux、OS X 和 Windows。

例如:

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

在图像周围添加 10 像素边框。要进行纵横比填充,事情必须更加复杂。这是一个使用 ImageMagick 执行所需操作的 Bash 脚本:横版垫

答案3

我在 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

相关内容