首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Node.js (和NPM包' PSD ')解析Adobe文件,编程替换图像层,然后保存/呈现为PNG。

使用Node.js (和NPM包' PSD ')解析Adobe文件,编程替换图像层,然后保存/呈现为PNG。
EN

Stack Overflow用户
提问于 2017-08-31 18:00:50
回答 1查看 3.2K关注 0票数 11

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

用例:

渲染模型预览图像

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

替换层是在x和y上对模型模板进行三维倾斜。我加入了一幅图片来说明这意味着什么。未来还将创建更多的模型模板,这就是为什么我认为用恒定值标记替换层是实现这一点的方法。

模板文件:

上传的图片:

最后呈现的图像

我不需要HTTP服务器/身份验证等方面的帮助,这部分是微不足道的。我是唯一的正在寻找一种方法来取代图像层。

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

我已经看过几个NPM包来完成这项工作,但没有能够得到一个有效的原型。这个方案似乎是最有希望的。

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

我目前有以下代码:

代码语言:javascript
运行
复制
/* 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 */   

我尝试了各种方式打开一个图像文件,并替换replacementLayer中的私营部门司,但我无法使它工作。仅仅用一个新的缓冲区对象覆盖属性是不够的。

将映像保存为PNG是非常简单的

代码语言:javascript
运行
复制
psd.image.saveAsPng('./output.png')

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-09-04 01:18:38

ag-psd可以处理此问题,但保存的PSD不呈现最外层。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45987543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档