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

Javascript 调整图像大小并裁剪图像(photoshop脚本),javascript,scripting,photoshop,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 Folde

我正试图从一个文件夹中调整和裁剪多个图像。首先,让我们看一下脚本的一些部分:

    // 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);
//文档设置
app.preferences.rulerUnits=单位.MM;
app.displayDialogs=DialogModes.NO;
//功能
函数处理(文件夹、文件、w、h){
var f_alta=新文件夹(文件夹+“/alta”);
如果(!f_alta.exists){f_alta.create();}
对于(var cont=0;cont
这个脚本有更多的代码,但并不重要

这样做的目的是从键盘上获取臀部宽度(“w”)和高度(“h”),并在图像显示时获取文件夹(“文件夹”)。因此,脚本获取该文件夹的所有“.tif”文件,并将它们保存到变量“files”中

函数processing_f_alta()是通过几个参数(文件夹、文件、w/2、h/2)调用的。为什么最后的参数被2除是无关紧要的

在函数中,脚本在名为“ALTA”ant的“文件夹”中创建一个新文件夹。所有“.tif”文件都复制到该文件夹中。然后,脚本获取所有这些最后的“.tif”文件,并将其大小调整为新的值,即带(w/2)和高度(h/2)

在这里之前一切都很好

现在问题来了。我想不失真地裁剪文件,但我不知道怎么做

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

我在一个名为“test”的文件夹中有一个40x40cm的图像。我使用以下值执行脚本:w=30,h=15,folder=“test”。 当我运行脚本时,我在名为“ALTA”的“test”中得到一个新文件夹,图像大小为15x7,5cm。没错。但是当我打开文件时,它没有被卷起来。它垂直变形了。我想要得到的是这个结果,但是当图像垂直裁剪时,我得到了一个变形的图像

我尝试了crop()、resizeCanvas()函数,但未能得到预期的结果

你能帮我解决我的问题吗

提前感谢您的时间。

请尝试:

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);
}
img_file.resizeImage(null,UnitValue(h,“cm”),null,ResampleMethod.BICUBIC);
如果(img_file.width
(另外:我在这台机器上没有Photoshop,所以这是未经测试的代码,但基本上你需要先调整高度,然后放大宽度(如果它小于你想要的),然后再裁剪图像)

现在可以了:

// 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