请求修复Photoshop Color Setting检查与切换脚本
Photoshop颜色设置检查与切换脚本修正
我需要一个脚本,在处理图片前检查当前的颜色设置(Color Setting),可以切换到其他设置或者直接使用当前设置。找到了能加载CSF文件的监听脚本,但不知道怎么检查当前Color Setting,附上有问题的代码,请求帮忙修正。
问题代码
var idcolorSettings = stringIDToTypeID( "colorSettings" ); if (idcolorSettings == "Untitled1.CSF") //这里逻辑错误 { var idsetd = charIDToTypeID( "setd" ); var desc38 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref13 = new ActionReference(); var idPrpr = charIDToTypeID( "Prpr" ); var idcolorSettings = stringIDToTypeID( "colorSettings" ); ref13.putProperty( idPrpr, idcolorSettings ); var idcapp = charIDToTypeID( "capp" ); var idOrdn = charIDToTypeID( "Ordn" ); var idTrgt = charIDToTypeID( "Trgt" ); ref13.putEnumerated( idcapp, idOrdn, idTrgt ); desc38.putReference( idnull, ref13 ); var idT = charIDToTypeID( "T " ); var desc39 = new ActionDescriptor(); var idUsng = charIDToTypeID( "Usng" ); desc39.putPath( idUsng, new File( ".../AppData/Roaming/Adobe/Color/Settings/Untitled2.CSF" ) ); var idcolorSettings = stringIDToTypeID( "colorSettings" ); desc38.putObject( idT, idcolorSettings, desc39 ); executeAction( idsetd, desc38, DialogModes.NO ); load } else { //切换到其他CSF文件 }
错误说明
原来的判断逻辑完全错误:idcolorSettings是stringIDToTypeID()返回的数字类型的ID标识,不是当前颜色配置的文件名,直接和字符串"Untitled1.CSF"比较永远不会成立。
修正后的脚本
下面是可以正确检查当前颜色设置并切换的完整脚本:
// 获取当前颜色设置的文件名 function getCurrentColorSettingsName() { var ref = new ActionReference(); ref.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("colorSettings")); ref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); var desc = executeActionGet(ref); var csfPath = desc.getPath(charIDToTypeID("Usng")); // 从路径中提取文件名 return csfPath.name; } // 切换到指定的CSF文件 function switchColorSettings(csfFilePath) { var csfFile = new File(csfFilePath); if (!csfFile.exists) { alert("指定的CSF文件不存在:" + csfFilePath); return; } var setdDesc = new ActionDescriptor(); var ref = new ActionReference(); ref.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("colorSettings")); ref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); setdDesc.putReference(charIDToTypeID("null"), ref); var csfDesc = new ActionDescriptor(); csfDesc.putPath(charIDToTypeID("Usng"), csfFile); setdDesc.putObject(charIDToTypeID("T "), stringIDToTypeID("colorSettings"), csfDesc); executeAction(charIDToTypeID("setd"), setdDesc, DialogModes.NO); } // 主逻辑 var currentCSFName = getCurrentColorSettingsName(); var targetCSFPath = "~/AppData/Roaming/Adobe/Color/Settings/Untitled2.CSF"; // 替换为你的目标路径 var alternativeCSFPath = "~/AppData/Roaming/Adobe/Color/Settings/Other.CSF"; // 替换为其他备选路径 if (currentCSFName === "Untitled1.CSF") { // 当前是Untitled1,切换到Untitled2 switchColorSettings(targetCSFPath); alert("已切换颜色设置为:Untitled2.CSF"); } else { // 切换到其他设置 switchColorSettings(alternativeCSFPath); alert("已切换颜色设置为:Other.CSF"); }
关键改进点
- 新增
getCurrentColorSettingsName()函数,通过executeActionGet()获取当前颜色配置的完整路径,再提取文件名 - 封装
switchColorSettings()函数,统一处理CSF文件的加载逻辑,增加文件存在性检查 - 修正判断逻辑,直接对比当前CSF文件名和目标文件名
内容的提问来源于stack exchange,提问作者Tsunami Lâm
相关产品推荐
相关产品推荐

