欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

PSD.rb:以树方式读写Photoshop文档的开源Ruby包

程序员文章站 2022-06-02 08:05:12
...
PSD(Photoshop Document)是Adobe Photoshop的专用格式,这种格式可以存储Photoshop中所有的图层,通道、参考线、注解和颜色模式等信息。

今天,开发者LayerVault在Github上开源了一个可以读写PSD文档的工具——PSD.rb,该工具使用Ruby编写,允许你以一种易管理的树结构方式来处理Photoshop文档,从而找出文档中的重要数据,比如:

  • 文档结构
  • 文件大小
  • 图层/目录大小和配置信息
  • 图层/目录名称
  • 图层/目录的可见性和透明度
  • 字体数据(via psd-enginedata),包括文本区域内容以及字体名称、大小和颜色
  • 颜色模式和位深度
  • 矢量蒙版数据
  • 扁平化图像数据
项目地址:https://github.com/layervault/psd.rb

国内镜像地址: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