PSD.rb:以树方式读写Photoshop文档的开源Ruby包
程序员文章站
2022-06-02 08:05:12
...
PSD(Photoshop Document)是Adobe Photoshop的专用格式,这种格式可以存储Photoshop中所有的图层,通道、参考线、注解和颜色模式等信息。
今天,开发者LayerVault在Github上开源了一个可以读写PSD文档的工具——PSD.rb,该工具使用Ruby编写,允许你以一种易管理的树结构方式来处理Photoshop文档,从而找出文档中的重要数据,比如:
国内镜像地址:https://code.csdn.net/OS_Mirror/psd.rb
下面来看看一些示例代码。
加载PSD文件:
遍历文档
以树结构方式访问PSD文件,可使用psd.tree来获得根节点。该工具还提供了如下方法来访问相应的元素:
导出数据
生成的数据格式如下:
你还可以将PSD文件导出为一个图像文件:
今天,开发者LayerVault在Github上开源了一个可以读写PSD文档的工具——PSD.rb,该工具使用Ruby编写,允许你以一种易管理的树结构方式来处理Photoshop文档,从而找出文档中的重要数据,比如:
- 文档结构
- 文件大小
- 图层/目录大小和配置信息
- 图层/目录名称
- 图层/目录的可见性和透明度
- 字体数据(via psd-enginedata),包括文本区域内容以及字体名称、大小和颜色
- 颜色模式和位深度
- 矢量蒙版数据
- 扁平化图像数据
国内镜像地址:https://code.csdn.net/OS_Mirror/psd.rb
下面来看看一些示例代码。
加载PSD文件:
require 'psd' psd = PSD.new('/path/to/file.psd') psd.parse!
遍历文档
以树结构方式访问PSD文件,可使用psd.tree来获得根节点。该工具还提供了如下方法来访问相应的元素:
- root:获得根节点
- ancestors:获得当前节点所在路径的祖先(不含根节点)
- siblings:获得当前节点的所有兄弟节点
- descendants:获得当前节点的所有后代节点
- subtree:和descendants类似,但不包含当前节点
- depth:计算当前节点的深度
psd.tree.descendant_layers.first.type.font # Returns {:name=>"HelveticaNeue-Light", :sizes=>[33.0], :colors=>[[255, 19, 120, 98]], :css=> "font-family: \"HelveticaNeue-Light\", \"AdobeInvisFont\", \"MyriadPro-Regular\";\nfont-size: 33.0pt;\ncolor: rgba(19, 120, 98, 255);"}
导出数据
pp psd.tree.to_hash
生成的数据格式如下:
{:children=> [{:type=>:group, :visible=>false, :opacity=>1.0, :blending_mode=>"normal", :name=>"Version D", :left=>0, :right=>900, :top=>0, :bottom=>600, :height=>900, :width=>600, :children=> [{:type=>:layer, :visible=>true, :opacity=>1.0, :blending_mode=>"normal", :name=>"Make a change and save.", :left=>275, :right=>636, :top=>435, :bottom=>466, :height=>31, :width=>361, :text=> {:value=>"Make a change and save.", :font=> {:name=>"HelveticaNeue-Light", :sizes=>[33.0], :colors=>[[255, 19, 120, 98]], :css=> "font-family: \"HelveticaNeue-Light\", \"AdobeInvisFont\", \"MyriadPro-Regular\";\nfont-size: 33.0pt;\ncolor: rgba(19, 120, 98, 255);"}, :left=>0, :top=>0, :right=>0, :bottom=>0, :transform=> {:xx=>1.0, :xy=>0.0, :yx=>0.0, :yy=>1.0, :tx=>456.0, :ty=>459.0}}, :ref_x=>264.0, :ref_y=>-3.0}] }], :document=>{:width=>900, :height=>600}}
你还可以将PSD文件导出为一个图像文件:
png = psd.image.to_png # reference to PNG data psd.image.save_as_png 'path/to/output.png' # writes PNG to disk