图片转svg标注_使用psd.js将PSD转成SVG -- 基础篇(文字&图片)

本文介绍了如何使用psd.js库将Photoshop(PSD)文件转换为SVG,以实现在线模板化的会场页面题图。文章详细解析了PSD文档的JSON结构,探讨了处理图像图层、文字图层的方法,并提供了生成SVG文档根标签的示例。重点讲解了如何处理图像图层(包括内联Base64编码和CDN外链)以及文字图层,包括字体大小、颜色、字体族的转换和定位。
摘要由CSDN通过智能技术生成

转载至微信公众号:方凳雅集

背景

随着发展,活动会场页面的题图运营需要线上模板化,而自研的导购素材制作平台接入了海棠-创意中心,通过平台能力,将素材模板化,并且通过配置化的方式生成多种场景化,个性化的素材。但是创意中心的素材模板是基于SVG的,而会场页面的题图基本是基于Photoshop(PS)输出,源文件是PSD。由于SVG是面向矢量图形的标记语言,而PS是以位图处理为中心的图像处理软件,大多时候,PS无法直接导出SVG文件。

为了能让会场页面的题图模板接入到导购素材制作平台,同时降低设计师的使用门槛,我们需要在导购素材制作平台中实现直接将PSD转成SVG的功能,在线化的将PSD转成SVG,然后导入到创意中心,将题图模板化。

[]()

使用psd.js解析PSD

PSD文档是一个二进制文件,官网有相关的格式说明文档。目前,在前端解析PSD文档比较成熟的方案是使用 psd.js ,使用方法和API可以参见这里。

[]()

PSD的JSON结构

可以通过如下的方式导出PSD文档的JSON结构。

const PSD = require('psd');

const psd = PSD.fromFile(file); // file为psd文档的存储路径

psd.parse();

console.log(psd.tree().export());

JSON结构大概如下:

{ children:

[ { type: 'group',

visible: false,

opacity: 1,

blendingMode: 'normal',

name: 'Version D',

left: 0,

right: 900,

top: 0,

bottom: 600,

height: 600,

width: 900,

children:

[ { type: 'layer',

visible: true,

opacity: 1,

blendingMode: 'normal',

name: 'Make a change and save.',

left: 275,

right: 636,

top: 435,

bottom: 466,

height: 31,

width: 361,

mask: {},

text:

{ value: 'Make a change and save.',

font:

{ name: 'HelveticaNeue-Light',

sizes: [ 33 ],

colors: [ [ 85, 96, 110, 255 ] ],

alignment: [ 'center' ] },

left: 0,

top: 0,

right: 0,

bottom: 0,

transform: { xx: 1, xy: 0, yx: 0, yy: 1, tx: 456, ty: 459 } },

image: {} } ] } ],

document:

{ width: 900,

height: 600,

resources:

{ layerComps:

[ { id: 692243163, name: 'Version A', capturedInfo: 1 },

{ id: 725235304, name: 'Version B', capturedInfo: 1 },

{ id: 730932877, name: 'Version C', capturedInfo: 1 } ],

guides: [],

slices: [] } } }

最外层的children描述的是图层信息,是一个数组类型的对象,document描述的是PSD文档全局信息,除了width和height其他不必过多关注,我们需要重点关注的是children下的图层信息。

psd.js也支持导出单个图层的JSON。

// 访问图层节点

const node = psd.tree().childrenAtPath('Version A/Matte')[0];

// or

const node =psd.tree().childrenAtPath(['Version A', 'Matte'])[0];

// 获取图层信息

node.export();

[]()

JSON结构字段说明

图层信息都记录在children数组中,数组的item包含一些公共字段,比如type、name、visible

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值