1

当我使用(手动)Photoshop 保存 PNG-24 文件时,我得到了这张图片(15.5KB):

在此处输入图像描述

使用 javascript 保存时,我得到了这张图片 (14.1KB):

在此处输入图像描述

源图像是一个 512 像素的正方形,我将其调整为 96 像素(在第一种情况下手动,在第二种情况下通过脚本)

有问题的脚本是:

// options to use on export
var options = new ExportOptionsSaveForWeb();
options.quality = 100;  
options.format = SaveDocumentType.PNG;  
options.PNG8 = false;

// resize
doc.resizeImage(UnitValue(96,'px'), null, null, ResampleMethod.BICUBIC);
// save to file
var newname = doc.fullName + '_96.png';
newname = newname.replace ('.psd', '');
doc.exportDocument(new File(newname), ExportType.SAVEFORWEB, options);

任何人都可以告诉我使用脚本获取相同图像的正确选项是什么?

4

1 回答 1

1

好吧,我找到了一个非常有用的帖子,如何记录一个 Photoshop 动作并查看它的 js 或 vb 文件。
您需要使用一个名为 Script Listener 的插件,您可以从Adob​​e Scripting Page下载它

按照这篇文章中的说明进行操作(不是接受的答案,而是 Kevin Sharnhorst 的答案)

然后很容易将操作与我拥有的脚本进行比较,最坏的情况是我可以使用侦听器创建的代码来执行完全相同的操作。

实际运行 后编辑 使用上述技术后,罪魁祸首不是 SaveForWeb 函数,而是图像调整大小。似乎 doc.resizeImage() 中没有足够的选项来达到相同的结果。
我复制了监听器(丑陋的)代码,现在结果和预期的一样

var idImgS = charIDToTypeID( "ImgS" );
    var desc2 = new ActionDescriptor();
    var idWdth = charIDToTypeID( "Wdth" );
    var idPxl = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( idWdth, idPxl, 96.000000 );
    var idscaleStyles = stringIDToTypeID( "scaleStyles" );
    desc2.putBoolean( idscaleStyles, true );
    var idCnsP = charIDToTypeID( "CnsP" );
    desc2.putBoolean( idCnsP, true );
    var idIntr = charIDToTypeID( "Intr" );
    var idIntp = charIDToTypeID( "Intp" );
    var idbicubicAutomatic = stringIDToTypeID( "bicubicAutomatic" );
    desc2.putEnumerated( idIntr, idIntp, idbicubicAutomatic );
executeAction( idImgS, desc2, DialogModes.NO );
于 2013-03-10T05:54:30.857 回答