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

React项目中使用ag-psd模块为PSD指定图层添图报错解决方案

问题解决:React中使用ag-psd修改PSD图层后预览报错

错误原因

执行setMockupPreview(newPsd.canvas.toDataURL())时出错,核心问题是writePsd(psd)的返回值是PSD格式的二进制数据(Blob/Buffer),并非带有canvas属性的PSD对象,所以调用newPsd.canvas会触发“读取undefined的canvas属性”的错误。另外你代码里直接修改图层canvas的宽高,会破坏原PSD的图层结构,也可能导致后续渲染异常。

修正后的代码

const replacelayerName = 'replace';
const replacelayer = psd.children.find((child) => child.name === replacelayerName);

if (replacelayer && replacelayer.canvas) {
    const myImage = await loadImage(URL.createObjectURL(imageFile));
    const ctx = replacelayer.canvas.getContext('2d');
    
    // 清空原图层内容
    ctx.clearRect(0, 0, replacelayer.canvas.width, replacelayer.canvas.height);
    // 按原图层尺寸缩放绘制图片,避免变形
    ctx.drawImage(myImage, 0, 0, replacelayer.canvas.width, replacelayer.canvas.height);
    
    // 重新渲染整个PSD到canvas用于预览
    const previewCanvas = document.createElement('canvas');
    renderPsd(psd, { canvas: previewCanvas });
    setMockupPreview(previewCanvas.toDataURL());
}

关键说明

  1. 不要用writePsd的返回值做预览:writePsd仅用于生成可保存的PSD二进制文件,和预览用的canvas无关。
  2. 保持原图层尺寸:直接修改图层canvas宽高会打乱PSD的图层布局,应该通过缩放图片适配原图层尺寸。
  3. 用renderPsd生成预览:修改图层后,调用ag-psd的renderPsd方法,把整个PSD重新渲染到新canvas上,再获取dataURL。

内容的提问来源于stack exchange,提问作者VietThanh Sai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:01:19