使用psd.js读取16位通道PSD文件返回空的解决方法咨询
问题现象
使用psd.js读取PSD文件时,8位通道格式文件可正常解析读取,16位通道格式文件解析返回数据为空,当前使用的代码如下:
var PSD = require('psd'); const filePSDPath = 'psd file.psd'; var psd = PSD.fromFile(filePSDPath); psd.parse(); console.log("psd: ", psd.tree());
核心原因
psd.js原生未实现16位/通道、32位/通道格式PSD的完整解析逻辑,仅对8位通道格式做了完整适配,因此解析高位深PSD时会出现图层、图像数据为空的问题,和现有代码的调用写法无关。
解决方法
- 格式预转换(适配现有psd.js技术栈)
若必须沿用psd.js,可在解析前通过图像处理工具将16位通道PSD批量转换为8位通道格式,转换后原有代码无需任何修改即可正常解析。该方案会损失高位深的色彩精度,仅适用于对色彩精度要求不高的业务场景。 - 替换支持高位深解析的JS库
目前JS生态中可支持16位通道PSD读取的成熟库如下:ag-psd:持续维护的PSD解析/生成库,完整覆盖8位、16位、32位通道PSD的图层结构、图像像素数据解析,同时兼容浏览器与Node.js环境,API设计和psd.js接近,迁移成本低。psd3:基于原版psd.js衍生的维护版本,补全了16位通道的解析逻辑,可直接替换原有psd.js依赖,代码改动量极小,但版本更新频率较低。
参考实现(Node.js环境下使用ag-psd读取16位PSD)
const { readPsd } = require('ag-psd'); const fs = require('fs'); const psdPath = 'psd file.psd'; const psdBuffer = fs.readFileSync(psdPath); // 开启16位数据读取配置 const psdData = readPsd(psdBuffer, { skipLayerImageData: false, skipCompositeImageData: false, use16BitData: true }); // 输出图层结构、图像数据 console.log("psd图层树: ", psdData.children); console.log("合成图像像素数据: ", psdData.imageData);
内容的提问来源于stack exchange,提问作者Hai Nguyen
相关产品推荐
相关产品推荐

