【发布时间】:2016-05-21 17:17:34
【问题描述】:
目前我正在编写一个脚本,其目的是在新图层上导入任意大小和 DPI 的图像,应用图层蒙版,并对其进行缩放以填充图像(例如,如果导入的图像在横向,高度将被缩放直到等于文档高度)。不幸的是,Photoshop 以看似随机的缩放比例放置图像。使用 scriptlistener,如果我放置一个图像,并将百分比缩放(文件下方顶部的百分比、编辑、图像等...功能区)更改为宽度和高度的 100%,我得到这个:
var idPlc = charIDToTypeID( "Plc " );
var desc144 = new ActionDescriptor();
var idIdnt = charIDToTypeID( "Idnt" );
desc144.putInteger( idIdnt, 44 );
var idnull = charIDToTypeID( "null" );
desc144.putPath( idnull, new File( "C:\\Users\\Cameron Anderson\\Desktop\\Junk\\2hu chibis\\Wallpapers\\Exports\\1920x1080\\New folder\\Alice.png" ) );
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcsa = charIDToTypeID( "Qcsa" );
desc144.putEnumerated( idFTcs, idQCSt, idQcsa );
var idOfst = charIDToTypeID( "Ofst" );
var desc145 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc145.putUnitDouble( idHrzn, idPxl, -0.000000 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc145.putUnitDouble( idVrtc, idPxl, -0.000000 );
var idOfst = charIDToTypeID( "Ofst" );
desc144.putObject( idOfst, idOfst, desc145 );
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc144.putUnitDouble( idWdth, idPrc, 108.843537 );
var idHght = charIDToTypeID( "Hght" );
var idPrc = charIDToTypeID( "#Prc" );
desc144.putUnitDouble( idHght, idPrc, 108.853411 );
var idLnkd = charIDToTypeID( "Lnkd" );
desc144.putBoolean( idLnkd, true );
executeAction( idPlc, desc144, DialogModes.NO );
根据我目前对脚本侦听器的了解,我相信类似于 desc144.putUnitDouble( idWdth, idPrc, 108.843537 ); 的两行描述了百分比缩放,因为它们上面的行给出了 TypeID "#Prc" ,但我不明白为什么它应该是 108.843537 而不是 100。
有什么方法可以让 Photoshop 以一致的方式放置吗?或者至少,是否有可能让所有放置的图像都以 100% 放置,而不是在幕后发生的任何事情导致代码数字很奇怪?
最终脚本需要能够处理任何合理尺寸和 DPI 的图像,因为我可以找到文档 DPI 和放置的图像之间的比率来正确缩放它们。
提前致谢!!
【问题讨论】:
-
我的猜测是,如果您的图像具有不同的 DPI,那么您还需要考虑到这一点来缩放它们。您是否尝试过上面的脚本,将 108 更改为 100 并查看会发生什么?不幸的是,我不是专家,但我发现 Adobe JS 参考(过去很少使用)对于理解这段代码的含义非常有用。希望对您有所帮助:adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/cs6/…
-
是的,我最初尝试将其设置为 100,因为我认为这是 100%,因此我认为 1920x1080 图像的宽度太短了 160 像素。 Adobe 参考指南似乎非常有用,但是您可以使用脚本执行的大部分操作(例如椭圆选择)都无法在其中找到,而脚本侦听器在这方面更有用看待。不过,事件 ID 代码非常有用。
-
这些是我使用的比率,考虑了 DPI 的差异
var thanksPhotoshop = (objResolution/doc.resolution) * 100; scaleImported(thanksPhotoshop); var scalePercentage = (y / objHeight) * 100; scaleImported(scalePercentage);编辑:显然输入不做换行符,而是提交评论(和“编辑”中的一封信)跨度>
标签: javascript scale photoshop photoshop-script