如何用Extendscript将PS文档从32位转16位且不合并图层?
Photoshop脚本:32位转16位且保留图层的解决方案
直接设置activeDocument.bitsPerChannel = BitsPerChannelType.SIXTEEN;会自动拼合图层,这是该属性的默认行为,而你尝试的WITOUTMERGER/WithoutMerger并非BitsPerChannelType的合法属性,因此无效。
要在转换位深度时保留图层,需要通过调用Photoshop底层动作命令实现,以下是可行的JavaScript代码:
// 构建位深度转换的动作描述符 var depthDesc = new ActionDescriptor(); var channelRef = new ActionReference(); channelRef.putClass(charIDToTypeID("Chnl")); depthDesc.putReference(charIDToTypeID("null"), channelRef); // 指定转换为16位 depthDesc.putEnumerated(charIDToTypeID("Bth "), charIDToTypeID("Bth "), charIDToTypeID("16 ")); // 关键参数:设置为false以禁用图层合并 depthDesc.putBoolean(charIDToTypeID("Mrg "), false); // 执行位深度转换命令 executeAction(charIDToTypeID("Mk "), depthDesc, DialogModes.NO);
代码说明:
- 使用
ActionDescriptor和ActionReference直接调用Photoshop的内部命令,绕过了bitsPerChannel属性的自动拼合逻辑 charIDToTypeID用于转换Photoshop内部的字符ID为类型ID,确保跨版本兼容性Mrg参数设置为false是保留图层的核心,对应手动操作时的"不合并"选项
内容的提问来源于stack exchange,提问作者Killovicz
相关产品推荐
相关产品推荐

