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

时间:2017-08-31 18:00:50

标签: node.js png render psd

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

用例:

渲染样机预览图像

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

对于模型模板,替换图层在x和y上偏斜3d。我已经包含了一个图像来说明这意味着什么。将来会创建其他模型模板,这就是为什么我认为使用常量值标记替换层是实现此目的的方法。

模板文件: template file

上传的图片: uploaded image

最终渲染的图像 output image

我不需要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的图片应该填充'到图层的宽度和高度。

有什么想法吗?

0 个答案:

没有答案