Beauty Salon α-BET (alphabet)

space001
Blender3d Collada dae modeling Use Papervision3d on Progression3 and 4 http://a-bet.secret.jp/#/access
more whaison works.
whaison space
space002
http://whaison.jugem.jp/ https://jp.pinterest.com/whaison/ https://www.instagram.com/whaison/ https://whaison.amebaownd.com/
https://suzuri.jp/whaison
http://whaison.blogspot.com/
http://whaison.tumblr.com/ http://qiita.com/users/whaison http://www.behance.net/whaison https://github.com/whaison/ https://bitbucket.org/whaison http://serato.com/user/whaison http://whaison.hatenablog.jp/

typo memo
http://d.hatena.ne.jp/whaison/


dayNote
http://www.myspace.com/whaison http://ameblo.jp/whaison/ http://blog.crooz.jp/whaison/ http://blog.crooz.jp/whaisoncafe/ http://nenpyo.org/whaison

fulldisk
http://full.shin-gen.jp/
http://whaison.client.jp/
http://www.dclog.jp/whaison/
featured forums.
space004
forum.unity3d.com/

forums.unrealengine.com.

Progression Forum.

FlashDevelop Forum.

Papervision3D Forum.

FlexUserGroup Forum.

SparkProjectForum.





Twitter







Mobile
qrcode
Calendar
SunMonTueWedThuFriSat
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>
New Entries
Archives
Categories
Recent comment
  • FlashDevelopでフォント埋め込み
    感謝!! (12/24)
  • cocos2d-x-3.0rc0 ,c++ ,cpp でTexturePacker で 吐き出した、plist と png でパラパラアニメーションのコード例
    whaison (04/17)
  • Blender2.67にbvh(web上に2500個以上ころがってる)入れてそのBoneオブジェクトをUnity4.0のmecanimで使う
    whaison (08/19)
  • Apple Dev Center 「Certificates, Identifiers & Profiles」で Adhoc をつくってXCode4.6.1でArchiveしてipaを書き出し
    whaison (04/30)
  • Flash CS6でプロパティーパネルで物理演算のジャンプの高さを設定できるCitrus Engine
    whaison (03/01)
  • 「Flash以外、例えばKinectとか」ON TOKYO (会場:高田馬場4-11-8 Floor 6階 ) 短縮URL http://bit.ly/dI0Bfx
    uka (03/02)
  • App Store Review Guidelines アップル社のアプリ審査基準ガイドライン和訳 Apple が 開発者を悩ませ ユーザーをハッピーにしたいガイドライン。w
    whaison (01/25)
  • Unity3d では ADOBE JAPAN OSAKIで行われたFITC 2010 TOKYOでは、 「iOS用にパブリッシュするためには、フリー版ではなくて、有料版を買ってください。さらに追加のパッケージである、"iOS Package (for Development)"を買ってください」とのことだった。
    whaison (01/25)
  • enjoy Adidas-Futsal-Park
    whaison (01/16)
  • MacBookAir にFlashPlayer入れたらなった。Mac Flash Player 10.1/10.2でUstream などでカメラが認識されないバグそんなときはUstreamProducer!でもなくiPhoneだと直ぐにライブ配信できた
    whaison (01/14)
simple sintax high lighter2.0
space003
SyntaxHighlighter2.0用 の貼り付けコード作成する!
ブログパーツ-BLOG PARTS.
Profile
Links
Recommend
Sponsored Links
Admin
無料ブログ作成サービス JUGEM
Seach this site
            
2022.03.28 Monday
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - | pookmark |
            
2017.02.22 Wednesday
Rubyで書かれたPhotoshop.psdファイルパーサー

 

https://github.com/whaison/psd.rb

Rubyで書かれたPhotoshop.psdファイルパーサーがあった

 

 

 

# PSD.rb

[![Travis CI](https://travis-ci.org/layervault/psd.rb.png?branch=master)](https://travis-ci.org/layervault/psd.rb)

Rubyで書かれた一般的なPhotoshopファイルパーサーです。これを使用すると、管理可能なツリー構造でPhotoshopドキュメントを操作し、次のような重要なデータを見つけることができます。

  • 文書構造
  • ドキュメントサイズ
  • レイヤー/フォルダーサイズ+位置決め
  • レイヤー/フォルダー名
  • レイヤー/フォルダの可視性と不透明度
  • フォントデータ([psd-enginedata](https://github.com/layervault/psd-enginedata)経由)   * テキストエリアの内容   * フォント名、サイズ、色
  • カラーモードとビット深度
  • ベクトルマスクデータ
  • フラット化された画像データ
  • レイヤーコンプ

PSD.rbは以下に対してテストされています:

  • MRI 1.9.3,2.0.0,2.1.0
  • JRuby(1.9.3モード)

MRI Rubyを使用しており、ネイティブコードでPSD.rbを大幅に高速化することに興味がある場合は、[psd_native](https://github.com/layervault/psd_native)を参照してください。

インストール

この行をアプリケーションのGemfileに追加します:

    gem 'psd'

そして、以下を実行します:

    $ bundle

または、自分でインストールしてください:

    $ gem install psd

## 使用法

[完全なソースコードのドキュメント](http://rubydoc.info/gems/psd/frames)が利用可能ですが、PSDデータを使用してアクセスするための一般的な方法がいくつかあります:

PSDを読み込む

``ルビー

----------------------------------///---- --/-/-///-------/--/--11111-------:// ---------11-111111-111111111---------- --/////------------------------------

PSD.rb

Travis CI

A general purpose Photoshop file parser written in Ruby. It allows you to work with a Photoshop document in a manageable tree structure and find out important data such as:

  • Document structure
  • Document size
  • Layer/folder size + positioning
  • Layer/folder names
  • Layer/folder visibility and opacity
  • Font data (via psd-enginedata)
    • Text area contents
    • Font names, sizes, and colors
  • Color mode and bit-depth
  • Vector mask data
  • Flattened image data
  • Layer comps

PSD.rb is tested against:

  • MRI 1.9.3, 2.0.0, 2.1.0
  • JRuby (1.9.3 mode)

If you use MRI Ruby and are interested in significantly speeding up PSD.rb with native code, check out psd_native.

Installation

Add this line to your application's Gemfile:

gem 'psd'

And then execute:

$ bundle

Or install it yourself as:

$ gem install psd

Usage

The full source code documentation is available, but here are some common ways to use and access the PSD data:

Loading a PSD

require 'psd'

psd = PSD.new('/path/to/file.psd')
psd.parse!

Or, if you prefer the File.open way of doing things, you can do that too.

require 'psd'

PSD.open('path/to/file.psd') do |psd|
  p psd.tree.to_hash
end

As you can see, open calls parse! for you, so that you can get down to business right away.

If you happen to prefer things DSL-style, the open method will also let you operate on the PSD object directly. Again, the call to parse! is handled for you.

require 'psd'

PSD.open('path/to/file.psd') do
  p tree.to_hash
end

Traversing the Document

To access the document as a tree structure, use psd.tree to get the root node. From there, work with the tree using any of these methods:

  • root: get the root node from anywhere in the tree
  • root?: is this the root node?
  • children: get all immediate children of the node
  • has_children?: does this node have any children?
  • childless?: opposite of has_children?
  • ancestors: get all ancestors in the path of this node (excluding the root)
  • siblings: get all sibling tree nodes including the current one (e.g. all layers in a folder)
  • next_sibling: gets the sibling immediately following the current node
  • prev_sibling: gets the sibling immediately before the current node
  • has_siblings?: does this node have any siblings?
  • only_child?: opposite of has_siblings?
  • descendants: get all descendant nodes not including the current one
  • subtree: same as descendants but starts with the current node
  • depth: calculate the depth of the current node (root node is 0)
  • path: gets the path to the current node

For any of the traversal methods, you can also retrieve folder or layer nodes only by appending _layers or _groups to the method. For example:

psd.tree.descendant_layers

If you know the path to a group or layer within the tree, you can search by that path. Note that this always returns an Array because layer/group names do not have to be unique.

psd.tree.children_at_path("Version A/Matte")
psd.tree.children_at_path(["Version A", "Matte"])

Layer Comps

You can also filter nodes based on a layer comp. To generate a new tree with layer visibility and position set according to the layer comp data:

# Get information about all the available layer comps
puts psd.layer_comps

# Can filter by name or by ID (obtained from above)
tree = psd.tree.filter_by_comp('Version A')
puts tree.children.map(&:name)

This returns a new node tree and does not alter the original.

Accessing Layer Data

To get data such as the name or dimensions of a layer:

psd.tree.descendant_layers.first.name
psd.tree.descendant_layers.first.width

PSD files also store various pieces of information in "layer info" blocks. Which blocks a layer has varies from layer-to-layer, but to access them you can do:

psd.tree.descendant_layers.first.text[: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);"}

Exporting Data

When working with the tree structure, you can recursively export any node to a Hash.

pp psd.tree.to_hash

Which produces something like:

{: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}}

You can also export the PSD to a flattened image. Please note that, at this time, not all image modes + depths are supported.

png = psd.image.to_png # reference to PNG data
psd.image.save_as_png 'path/to/output.png' # writes PNG to disk

This uses the full rasterized preview provided by Photoshop. It does not use the built-in rendering engine (described below). If the file was not saved with Compatibility Mode enabled, this will return an empty image.

Preview Building

You can build previews of any subset or version of the PSD document using the built-in renderer. This is useful for generating previews of layer comps or exporting individual layer groups as images.

# Save a layer comp
psd.tree.filter_by_comp("Version A").save_as_png('./Version A.png')

# Generate PNG of individual layer group
psd.tree.children_at_path("Group 1").first.to_png

Slices

Because slices are relative to the full document, you can access them directly on the psd object. Use psd.slices to get an array of all slices in the document.

slices = psd.slices
slices.first.name #=> "Logo"
slices.first.left #=> 20
slices.first.width #=> 200

You can also search for slices if you know their name or ID. Because slice names do not need to be unique, slices_by_name will always return an array of all matches.

psd.slice_by_id(2)
psd.slices_by_name('Logo')

When you create a slice based off of a layer, Photoshop stores this relation in the file. If you have a slice that was created this way, you can easily get the associated layer.

slice = psd.slices_by_name('Logo').first
slice.associated_layer #=> <PSD::Node::Layer>

Finally, you can export slices as PNGs.

psd.slices.first.to_png #=> ChunkyPNG canvas
psd.slices_by_name('Logo').first.save_as_png('Logo.png') #=> writes Logo.png

Debugging

If you run into any problems parsing a PSD, you can enable debug logging via the PSD_DEBUG environment variable. For example:

PSD_DEBUG=true bundle exec examples/parse.rb

If you need to enable debugging programatically:

PSD.debug = true

To-do

There are a few features that are currently missing from PSD.rb.

  • More image modes + depths for image exporting
  • Support for rendering all layer styles
  • Support for layer comp adjusted layer styles
  • Render engine fixes for groups with lowered opacity
| whaison | file-parser | 22:43 | comments(0) | - | pookmark |