今日学习内容
- PS 脚本,实现自动更改文本内容和图片,并导出 png 图片
ps 的内置脚本语言是 ExtendScript,遵循 ECMAScript 规范,和 js 很像,会 js 的上手很快
文末有简单的小例子
PS 脚本
前期准备
- 下载脚本编辑器 Adobe ExtendScript Toolkit CC(简称 ESTK,直接搜名字下载即可,在 github 上开源)
- 下载 PS 任意版本(最好是 18 年之后的版本,具体支持版本可查阅脚本编辑器的)
打开 ps 和 ESTK
打开之后效果如下图所示,选择对应版本和软件,若工作指示标记是绿色的锁链则表示连接成功,可以开始编写脚本了
ES 基本语法
整体语法和 js 类似,但是集成了一些操作 adobe 软件的函数
新建文档:
#target photoshop //
app.bringToFront()
// 定义文档的宽和高
var width = 10 // 目前ps的默认标尺宽度为像素px
var height = 10
// 定义文档分辨率
var resolution = 72
// 定义文档的名字
var name = "我的文档test"
// 定义文档的模式
var mode = NewDocumentMode.RGB
// 定义文档的初始化填充
var initialFill = DocumentFill.WHITE
var pixelAspectRatio = 1
var bitsPerChannel = BitsPerChannelType.EIGHT
// 新建文档的命令,这些参数其实都可以缺省,直接一个app.documents.add()怼上去就能新建文档
app.documents.add (width, height, resolution, name, mode, initialFill, pixelAspectRatio, bitsPerChannel)
for 循环
// 定义一个数组
ll = [1,2,3,4,5]
// for循环,l从0开始一直循环到数组中所含元素个数
for (var l = 0; l<ll.length;l++){
$.write(ll[l]) // ES中使用$.write()代替console.log在控制台中打印
}
遍历字典
childdict = {"apple":"苹果","pen":"钢笔","coin":"硬币"}
for (var key in childdict){
value = childdict[key]
alert(key+"的中文是:"+value)
}
常用操作
// 警报消息
alert("输出")
// 打开文件
var filepath =new File("C:\\文件夹\\子文件夹\\文件.psd") // 括号里换成自己的文件地址
app.open(filepath) // 打开文件到ps中
// 获取窗口句柄
var doc = app.activeDocument // 获取当前活动目录的句柄
// 执行ps中提前预设的动作
app.doAction("更新","更新") // 此处的更新为ps中的动作名称,需提前在软件中设置
// 导出png图片文件
// 设置导出参数
var options = new ExportOptionsSaveForWeb();
options.format = SaveDocumentType.PNG; // 选择导出格式,可以是其他格式如JPEG、GIF等
options.PNG8 = false; // 如果选择PNG格式,设置是否为PNG-8
// 设置导出路径
var exportFolder = new Folder("C:\\文件夹\\子文件夹"); // 替换为你的导出文件夹路径
var exportFile = new File(exportFolder + "\\" + "output.png"); // 替换为导出文件的名称和格式
// 导出图片
doc.exportDocument(exportFile, ExportType.SAVEFORWEB, options);
doc.save()
doc.close()
完整代码为
脚本说明:读取psd文件,该文件中含有名为text的文本图层。脚本功能为更改文字并输出图片
#target photoshop
// 设定变量
const textList = ["替换文本1","替换文本2","替换文本3"]
// 工作目录
const workFile = "C:\\Users\\xiezeyu\\Desktop\\未标题-2.psd";
// 更改文字图层代码,输入图层名字和修改内容
function changeText(name, text){
var target = app.activeDocument.artLayers.getByName(name)
if(target){
target.textItem.contents = text
}
return "success"
}
// *******************主程序开始******************
var filepath =new File(workFile)
app.open(filepath)
var doc = app.activeDocument // 获取当前活动目录的句柄
// 设置导出参数
var options = new ExportOptionsSaveForWeb();
options.format = SaveDocumentType.PNG; // 选择导出格式,可以是其他格式如JPEG、GIF等
options.PNG8 = false; // 如果选择PNG格式,设置是否为PNG-8
// 更换内容
for (txt in textList){
var content = textList[txt]
changeText("text",content) // 前面的"tex"是图层的名字,后一个txt是要替换的内容
// 设置导出路径和导出文件名
var exportFolder = new Folder("C:\\Users\\xiezeyu\\Desktop"); // 替换为你的导出文件夹路径
var exportFile = new File(exportFolder + "\\" + txt +".png"); // 替换为导出文件的名称和格式
// 导出图片
doc.exportDocument(exportFile, ExportType.SAVEFORWEB, options);
}
// doc.save() // 保存当前内容,若需要保存文件可取消注释
doc.close()
alert("全部运行完成")