调整大小和裁剪图像(photoshop脚本)

时间:2018-02-23 16:01:07

标签: javascript scripting photoshop

我正在尝试调整大小并从文件夹中裁剪多张图片。首先,让我们看一下脚本的一些部分:

    // DOCUMENT SETTINGS
    app.preferences.rulerUnits = Units.MM;
    app.displayDialogs = DialogModes.NO;

    // FUNCTIONS
    function processing_f_alta(folder, files, w, h) {
        var f_alta = new Folder(folder + "/ALTA");
        if ( ! f_alta.exists ) { f_alta.create(); }

        for ( var cont = 0; cont < files.length; cont++ ) {
            files[cont].copy(decodeURI(f_alta) + "/" + files[cont].displayName);
        }

        var files = f_alta.getFiles("*.tif");
        for ( var cont = 0; cont < files.length; cont++ ) {
            var img_file = app.open(files[cont]);

            img_file.resizeImage(UnitValue(w, "cm"), UnitValue(h, "cm"), null, ResampleMethod.BICUBIC);
            img_file.resizeCanvas(UnitValue(w, "cm"), UnitValue(h, "cm"), AnchorPosition.MIDDLECENTER);

            img_file.close(SaveOptions.SAVECHANGES);
        }
    }

    var w =prompt("Width (cm)","","Introduzca valor");
    var h =prompt("Height (cm)","","Introduzca valor");

    var f_origin_folder = Folder.selectDialog("Select the containing folder of the images");
    var folder = new Folder(f_origin_folder);
    var files = folder.getFiles("*.tif");

    processing_f_alta(folder, files, w/2, h/2);

脚本有更多的代码,但它无关紧要。

这个想法是从键盘获得一个hipothetic宽度(“w”)和高度(“h”)并在图像(“文件夹”)时获取文件夹。因此,该脚本获取该文件夹的所有“.tif”文件,并将它们保存到变量“files”中。

使用多个参数(文件夹,文件,w / 2,h / 2 )调用函数 processing_f_alta()。为什么最后的参数除以2是无关紧要的。

在该函数中,脚本在名为“ALTA”的“文件夹”中创建一个新文件夹,将所有“.tif”文件复制到其中。然后,脚本获取所有这些最后的“.tif”文件,并将它们调整为使用( w / 2 )和height( h / 2 )的新值。< / p>

一切都好,直到这里。

现在出现了问题。我想裁剪文件没有任何扭曲,但我不知道该怎么做。

让我们看一个真实的例子(我正在测试的例子)。

我在一个名为“test”的文件夹中有一张40x40cm的图像。我用这些值执行脚本:w = 30,h = 15,folder =“test”。 当我运行脚本时,我得到一个名为“ALTA”的“test”新文件夹,图像大小调整为15x7,5cm。这是正确的。但是当我打开文件时,它并没有被破坏。它垂直变形了。我想得到的是这个结果,但是图像垂直裁剪,我得到一个变形的图像。

我尝试了 crop(),resizeCanvas()函数,但我无法得到我期待的结果。

你能帮我解决一下我的问题。

提前感谢您的时间。

2 个答案:

答案 0 :(得分:0)

尝试:

img_file.resizeImage(null, UnitValue(h, "cm"), null, ResampleMethod.BICUBIC);
if(img_file.width < w){
    img_file.resizeImage(UnitValue(w, "cm"), null, null, ResampleMethod.BICUBIC);
}

(另外:我在这台机器上没有Photoshop,所以这是未经测试的代码,但基本上你需要先调整高度,然后在裁剪图像之前放大宽度,如果它小于你想要的宽度)< / p>

答案 1 :(得分:0)

现在有效:

// resizeImage([width] [, height] [, resolution] [, sampleMethod] [, amount]);
        img_file.resizeImage(UnitValue(w, "cm"), null, null, ResampleMethod.BICUBIC);
        // crop(bounds [, angle] [, width] [, height]);
        //      bounds = array[left, top, right, bottom]
        bounds = [
            0,
            0,
            w*10,
            h*10
        ];
        img_file.crop(bounds);

下一步将从图像中心裁剪(现在从左上角开始裁剪)。

PD:我已经完成了w * 10和h * 10,因为如果原始w = 30且h = 30,例如,它将图像裁剪为w-> 3和h-> 3。 / p>