遇到一个日常,要用Photoshop 导出一批图片。
这些图片不同的是里面的文字参数,而且图片很多。
繁杂的工作当然用代码解决。
于是决定温习下Photoshop Scripting, 用JavaScript写Photoshop脚本,自动修改文本内容并且批量压缩导出图片。
先看成果(自动生成的文字图层):

每张图片长的类似下图:

每张图片只需要改变红色字体那部分参数。
如果用Photoshop一个地改,每张改7个文本,可能有20张,那就要操作140次了。
技术
JavaScript、Photoshop Scripting
思路(我也想用ES6, 不过不支持)
准备:如何执行脚本
1 首先新建一个拓展名为[.jsx]或[.js]的文件,在文件写上alert(‘Hello’);
2 然后打开Photoshop,执行‘文件’-‘脚本’-‘浏览’,载入你的脚本就可以执行,接着就会看到Photoshop弹出‘Hello’。
一 把每张图片的数据组成一个对象, 所有对象组成一个数据数组,数据代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13
| var datas = [ { name : '游龙', lengthes: '16cm', height : '8cm', width : '3cm', weight : '210g', spec : '一件', price : '¥50' }, ...... ];
|
二 分析Photoshop文档的文字图层,给文字图层命名。
(lengthes这个是防止与数组自带属性length冲突)

三 获取当前Photoshop文档的这7个文字图层,首先尝试获取一个图层,下面获取‘name’这个文字图层
1 2 3 4 5 6 7 8 9
| var docRef = app.activeDocument, dataLayerSets = docRef.layerSets.getByName('data'), dataArtLayers = dataLayerSets.artLayers;
dataArtLayers['name'].textItem.contents = '我是类型';
|
四 上面既然会单个修改文本图层了,那下面循环修改文字图层并且生成相应质量的图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| var KEYS = ['name', 'lengthes', 'height', 'width', 'weight', 'spec', 'price'];
for (var i=0; i<datas.length; i++) { var dataItem = datas[i];
for (var j = 0; j < KEYS.length; j++) { dataArtLayers[KEYS[j]].textItem.contents = dataItem[KEYS[j]]; } outputFolderImg = new File(outputFolder + '/' + dataItem['name'] + '.jpg'); docRef.exportDocument(outputFolderImg, ExportType.SAVEFORWEB, exportOptions); }
|
五 完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| preferences.rulerUnits = Units.PERCENT;
var docRef = app.activeDocument, dataLayerSets = docRef.layerSets.getByName('data'), dataArtLayers = dataLayerSets.artLayers
var outputFolder = Folder.selectDialog('选择输出的文件夹'), outputFolderImg;
var exportOptions = new ExportOptionsSaveForWeb();
var KEYS = ['name', 'lengthes', 'height', 'width', 'weight', 'spec', 'price'];
var datas = [ { name : '小行龙', lengthes: '10cm', height : '6cm', width : '2cm ~ 2.2cm', weight : '180g * 2(一对)', spec : '一对(该产品是按双购买)', price : '¥38' }, ...... ];
exportOptions.format = SaveDocumentType.JPEG; exportOptions.quality = 60;
for (var i=0; i<datas.length; i++) { var dataItem = datas[i]; for (var j = 0; j < KEYS.length; j++) { dataArtLayers[KEYS[j]].textItem.contents = dataItem[KEYS[j]]; } outputFolderImg = new File(outputFolder + '/' + dataItem['name'] + '.jpg'); docRef.exportDocument(outputFolderImg, ExportType.SAVEFORWEB, exportOptions); } alert('ooo,' + datas.length + '张图片完全加工出来啦~');
|
六 拓展
其实掌握了Photoshop Script编写脚本, 不仅仅只是导入脚本,还可以实现界面化操作的插件(其实是一个html5的拓展),如下图:

是不是想起了GuideGuide?只要有耐心,你创作出一个插件完全有可能!
而且,写Photoshop插件,不仅限制于JavaScript一门语言哦~
要了解更多,可以看文档:
Adobe Photoshop Scripting(Adobe Photoshop Scripting)
A Short Guide to HTML5 Extensions | Adobe Developer Connection(HTML5 Extensions)