使用 Node.js(和 NPM 包“psd”)解析 Adobe PSD 文件,以编程方式替换图像层,然后保存/渲染为 PNG

问题描述 投票:0回答:2

对于一个项目,我需要解析 Adobe Photoshop PSD 文件,以编程方式查找并替换图像图层,然后将其保存回 PSD 文件和/或将其导出为 PNG(或 JPEG)。我没有太多使用 Adobe Photoshop 的经验,但我认为这些类型的图层称为“智能图层”。

用例:

渲染样机预览图像

  • 用户将图像上传到 Node HTTP 服务器
  • 将 PSD 中的图层替换为 上传的图像(图像填充层)
  • 渲染为 PNG/JPEG 并写入 HTTP 响应

对于模型模板,替换层在 x 和 y 上 3d 倾斜。我添加了一张图片来说明这意味着什么。将来将创建额外的模型模板,这就是为什么我认为用常量值标记替换层是实现这一点的方法。

模板文件:

上传的图片:

最终渲染图像

我不需要 HTTP 服务器/身份验证等方面的帮助,这部分很简单。我只是寻找一种替换图像层的方法。

PSD 文件是/将是为此特定项目定制的。根据图层名称(标签)确定要替换的正确图层是可接受的实现。

我已经查看了几个 NPM 包来完成这项工作,但无法获得功能原型。这个套餐似乎是最有前途的。

https://www.npmjs.com/package/psd

我目前有以下代码:

/* mockup.js */
var PSD = require('psd')
var psd = PSD.fromFile("mockup.psd")
var fs = require('fs')

psd.parse()

/* For easier reference */
var replacementLayer, file, fileBuffer

let tree = psd.tree()

let layers = tree.layer.node._children

for(let layer of layers) {
    /* i named the layer 'replacementLayer' */
    if(layer.name == 'replacementLayer') { 
        replacementLayer = layer 
        file = replacementLayer.layer.file
        fileBuffer = replacementLayer.layer.file.data
    }
}

/* replacementLayer = instanceof Layer
   file = instanceof File with a property 'data' (data is a buffer)
   fileBuffer = instanceof Buffer */   

我尝试了各种打开图像文件并替换 PSD 中的 replacementLayer 的方法,但我无法让它工作。仅仅用新的 Buffer 对象覆盖属性是不够的。

将图像保存为 PNG 就这么简单

psd.image.saveAsPng('./output.png')

理想情况下,用于替换 replacementLayer 的图像应“填充”到图层的宽度和高度。

有什么想法吗?

node.js png render psd
2个回答
0
投票

ag-psd 可以处理这个问题,但是保存的 PSD 不会渲染最外层


0
投票

很抱歉在没有帮助的情况下提出问题。 你的问题解决了吗?我和你一样有一些问题。 和你的很相似。 如果您达到方法,可以与我分享吗? 希望得到您的帮助。 谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.