如何通过JavaScript在Photoshop中按序运行Contact Sheet II并修复加载问题
Photoshop Contact Sheet II脚本故障排查与修复
问题概述
尝试编写Photoshop脚本运行Contact Sheet II,但无法打开目标文件。需求如下:
- 目标文件路径:
D:/MyBook.jpg、D:/TheSun.jpg、D:/Car.jpg - 脚本需按字母顺序加载文件
原脚本代码:
function createContactSheet(fileNames){ var id = stringIDToTypeID( "0B71D221-F8CE-11d2-B21B-0008C75B322C" ); var desc1 = new ActionDescriptor(); var idCSIISettings = stringIDToTypeID( "CSIISettings" ); desc1.putString( idCSIISettings, '<ContactSheetIISettings>'+ '<source imageSource="Files" selectFile="'+ fileNames +'"/>'+ '<document units="pixels" width="910" height="25000" resolution="72" resUnits="pixels/inch" mode="RGB Color" bitDepth="8-bit" colorProfile="sRGB IEC61966-2.1" flattenLayers="true"/>'+ '<thumbnail place="across first" cols="1" rows="100" bestFit="false" useAutospacing="true" horz="1 px" vert="1 px"/>'+ '<caption enabled="false">'+ '<font name="Arial" size="12"/>'+ '</caption>'+ '</ContactSheetIISettings>' ); var idMsge = charIDToTypeID( "Msge" ); desc1.putString( idMsge, "Settings for Contact Sheet II" ); executeAction( id, desc1, DialogModes.NO ); } var fileNames = new File ("D:/HardSub2SRT/Pic of Subs/J2testJva/0001.jpg","D:/MyBook.jpg","D:/TheSun.jpg","D:/Car.jpg"); $.setenv("NoUI",false); createContactSheet(fileNames); $.setenv("NoUI","");
问题分析
- File对象初始化错误:
new File()仅支持单个路径参数,无法直接传入多个文件路径,导致fileNames变量无法正确指向目标文件集合。 - XML参数格式错误:Contact Sheet II的设置XML中,
selectFile属性需要竖线分隔的文件路径字符串,而非直接传入File对象。 - 未按需求过滤与排序:原代码包含额外的
0001.jpg,且未对目标文件执行字母排序操作。
修复后的脚本代码
function createContactSheet(filePathStr){ var id = stringIDToTypeID( "0B71D221-F8CE-11d2-B21B-0008C75B322C" ); var desc1 = new ActionDescriptor(); var idCSIISettings = stringIDToTypeID( "CSIISettings" ); desc1.putString( idCSIISettings, '<ContactSheetIISettings>'+ '<source imageSource="Files" selectFile="'+ filePathStr +'"/>'+ '<document units="pixels" width="910" height="25000" resolution="72" resUnits="pixels/inch" mode="RGB Color" bitDepth="8-bit" colorProfile="sRGB IEC61966-2.1" flattenLayers="true"/>'+ '<thumbnail place="across first" cols="1" rows="100" bestFit="false" useAutospacing="true" horz="1 px" vert="1 px"/>'+ '<caption enabled="false">'+ '<font name="Arial" size="12"/>'+ '</caption>'+ '</ContactSheetIISettings>' ); var idMsge = charIDToTypeID( "Msge" ); desc1.putString( idMsge, "Settings for Contact Sheet II" ); executeAction( id, desc1, DialogModes.NO ); } // 定义目标文件路径数组 var targetFiles = [ "D:/MyBook.jpg", "D:/TheSun.jpg", "D:/Car.jpg" ]; // 按字母顺序排序数组 targetFiles.sort(); // 转换为竖线分隔的字符串,适配XML参数要求 var filePathString = targetFiles.join("|"); $.setenv("NoUI", false); createContactSheet(filePathString); $.setenv("NoUI", "");
修复说明
- 正确管理文件路径:用数组存储目标文件路径,避免
new File()的参数错误。 - 实现字母排序:调用数组
sort()方法完成自然排序,满足需求。 - 适配参数格式:将数组转换为竖线分隔的字符串,符合Contact Sheet II的XML参数规范。
内容的提问来源于stack exchange,提问作者Sherlock_Holmes
相关产品推荐
相关产品推荐

