You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:27:19