Photoshop javascript SaveAsWeb使用脚本不会产生相同的结果

时间:2013-03-09 20:04:46

标签: javascript png photoshop

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

enter image description here

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

enter image description here

源图像是一个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);

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

1 个答案:

答案 0 :(得分:1)

好吧,我找到了一篇内容丰富的帖子,如何录制Photoshop动作并查看它的js或vb文件。
您需要使用名为Script Listener的插件,您可以从Adobe Scripting Page

下载它

按照this post中的说明(不是接受的答案,但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 );