当我使用(手动)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);
任何人都可以告诉我使用脚本获取相同图像的正确选项是什么?
答案 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 );