前言
设计朋友有需求做一批邀请函,有几十个人名,需要把人名加到海报中,PS里一个一个添加人名很麻烦,于是来问我有没有什么办法能够批量去添加。
希望把人名加到红框区域内
尝试用ps的脚本进行处理
准备
- PS(版本2021,理论上新版本也支持,再之前的版本没测试过)
- 人名名单
- 字体(可选)
- 海报底图
开始
先写了一个.jsx脚本。
什么是.jsx脚本?
.jsx 脚本是Adobe Photoshop的扩展脚本文件格式,它允许用户通过编写JavaScript代码来自动化Photoshop的任务和功能。这些脚本可以执行各种操作,比如打开和编辑图像、应用滤镜、创建新的图层或文本对象、导出文件等。
脚本内容
PS脚本.jsx
// 打开一个文档
var doc = app.activeDocument;
// 人名列表
var names = [
"王旭",
"李松达",
]; // 用实际的名字替换这些
var c1 = new SolidColor();
//255, 255, 126
with (c1.rgb) { red = 26; green = 26; blue = 26; }
// 获取桌面路径
var desktopPath = Folder.desktop.absoluteURI;
// 设置导出路径为桌面的 "ExportedImages" 文件夹
var exportPath = desktopPath + "/Images";
// 检查文件夹是否存在,如果不存在则创建
var exportFolder = new Folder(exportPath);
if (!exportFolder.exists) {
exportFolder.create();
}
// 设置导出参数
var exportOptions = new ExportOptionsSaveForWeb();
exportOptions.format = SaveDocumentType.PNG;
exportOptions.PNG8 = false;
exportOptions.transparency = true;
// 循环创建文本图层
for (var i = 0; i < names.length; i++) {
// 创建文本图层
var textLayer = doc.artLayers.add();
textLayer.kind = LayerKind.TEXT;
// 设置文本内容
textLayer.textItem.contents = names[i];
// 获取文本项(textItem)对象
var textItem = textLayer.textItem;
//var mytext=app.fonts.getByName("SimSun");
// 设置字体
textItem.font ="gongfanshouxiezhuanjiti"; // 你可以替换为你想要使用的字体名称
// 设置字体大小
textItem.size = 54;
textItem.justification = Justification.CENTER;
//textItem.width = 236.21;
//textItem.height=127.49;
// 设置文本颜色(黄色)
// var textColor = newRGBColor(); textColor.red = 255; textColor.green = 255; textColor.blue = 0;
textItem.color =c1; // 设置颜色
textItem.position = [2080, 2200]; // 设置位置
// 导出为 PNG 图片
doc.exportDocument(new File(exportPath + "/output_" + names[i] + ".png"), ExportType.SAVEFORWEB, exportOptions);
// 隐藏当前文本图层
textLayer.visible = false;
}
人名整理
人名需要以json
的格式来填写
// 人名列表
var names = [
"王旭",
"李松达",
];
简单写了个Bat
可以将人名转成json
格式
@echo off
setlocal enabledelayedexpansion
set input_file=data.txt
set output_file=output.json
echo [ > %output_file%
for /f "tokens=* delims=" %%a in (%input_file%) do (
set value=%%a
echo "!value!", >> %output_file%
)
echo ] >> %output_file%
echo Conversion complete. Output saved to %output_file%
然后将处理好的人名复制到脚本中即可。
测试效果
打开PS,将准备好的海报底图导入进去。
先创建一个文本试下位置和效果。选择好你要的字体,这里我选择了龚凡手写体。名字为Dom。
字体选择
在脚本中需要设定批量添加的字体。
// 设置字体
textItem.font ="gongfanshouxiezhuanjiti"; // 你可以替换为你想要使用的字体名称
那么这个gongfanshouxiezhuanjiti
是什么?为什么不填龚凡手写体呢?
这个其实就是字体的font-family
。
什么是font-family?
font-family 是一个CSS(层叠样式表)属性,用于为网页上的元素指定优先使用的字体列表。当在网页中设置字体时,font-family 允许你按优先顺序定义一个或多个字体名称,浏览器会根据这个列表来选择第一个可用的字体渲染文本。
如何查找font-family?
MAC
进入字体册
选中一个字体,点击信息按钮,右侧的PostScript
名称就是font-family了。
WIN
浏览器开发者工具:
在网页中,右键点击想要查看字体的文本。
选择“检查”(Inspect)或者“审查元素”(Inspect Element)。
在开发者工具中,找到“Styles”(样式)面板,这里会列出所有应用到该元素的CSS样式,包括 font-family。
执行脚本
PS点击脚本--浏览--选中.jsx脚本。
然后静等脚本执行完毕即可。
生成的海报会在桌面images文件夹里,以每个人的人名来命名。
总结
第一次尝试jsx,有些功能可以更简化,懒得写了。效果达到了就可以。在此记录下,防止后面忘了。