psd 3.2.4 → 3.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +25 -0
- data/lib/psd.rb +24 -17
- data/lib/psd/channel_image.rb +2 -0
- data/lib/psd/helpers.rb +2 -2
- data/lib/psd/image.rb +11 -7
- data/lib/psd/layer.rb +12 -1
- data/lib/psd/layer/blend_modes.rb +4 -2
- data/lib/psd/layer/info.rb +24 -0
- data/lib/psd/{layer_info → layer/info}/blend_clipping_elements.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/blend_interior_elements.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/fill_opacity.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/gradient_fill.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/layer_group.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/layer_id.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/layer_name_source.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/layer_section_divider.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/legacy_typetool.rb +2 -2
- data/lib/psd/{layer_info → layer/info}/locked.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/metadata_setting.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/object_effects.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/pattern.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/placed_layer.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/reference_point.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/sheet_color.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/solid_color.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/typetool.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/unicode_name.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/vector_mask.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/vector_origination.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/vector_stroke.rb +0 -0
- data/lib/psd/{layer_info → layer/info}/vector_stroke_content.rb +0 -0
- data/lib/psd/node.rb +13 -7
- data/lib/psd/nodes/ancestry.rb +76 -80
- data/lib/psd/nodes/layer.rb +5 -5
- data/lib/psd/nodes/search.rb +5 -1
- data/lib/psd/renderer.rb +8 -1
- data/lib/psd/renderer/canvas.rb +4 -2
- data/lib/psd/resources.rb +5 -1
- data/lib/psd/resources/base.rb +6 -3
- data/lib/psd/slice.rb +39 -0
- data/lib/psd/slices.rb +13 -0
- data/lib/psd/version.rb +1 -1
- data/psd.gemspec +0 -1
- metadata +28 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c7fc077ce3a8060aa8522a16838388a5a1930fa
|
4
|
+
data.tar.gz: 07cd330663d7d94810c89f031d09bc41269610b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b6deef34cb5f66e8c079da3c72ffae7d2f8ad8baed3a91f1f8552d29a8bd6dcead464474bed1f715c60a1927e48e22ecd7583f80aaad580c95e536bc2e86532
|
7
|
+
data.tar.gz: 5526dceb6954320be9ae3fd1d3a5a55b9820a8db16e68fea257e07f49f2f1207780010ec09a4cb2a73feca8c11895d112cb4dc16097fc3deff619c90268ebbfd
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -219,6 +219,31 @@ psd.tree.filter_by_comp("Version A").save_as_png('./Version A.png')
|
|
219
219
|
psd.tree.children_at_path("Group 1").first.to_png
|
220
220
|
```
|
221
221
|
|
222
|
+
### Slices
|
223
|
+
|
224
|
+
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.
|
225
|
+
|
226
|
+
``` ruby
|
227
|
+
slices = psd.slices
|
228
|
+
slices.first.name #=> "Logo"
|
229
|
+
slices.first.left #=> 20
|
230
|
+
slices.first.width #=> 200
|
231
|
+
```
|
232
|
+
|
233
|
+
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.
|
234
|
+
|
235
|
+
``` ruby
|
236
|
+
psd.slice_by_id(2)
|
237
|
+
psd.slices_by_name('Logo')
|
238
|
+
```
|
239
|
+
|
240
|
+
Finally, you can export slices as PNGs.
|
241
|
+
|
242
|
+
``` ruby
|
243
|
+
psd.slices.first.to_png #=> ChunkyPNG canvas
|
244
|
+
psd.slices_by_name('Logo').first.save_as_png('Logo.png') #=> writes Logo.png
|
245
|
+
```
|
246
|
+
|
222
247
|
### Debugging
|
223
248
|
|
224
249
|
If you run into any problems parsing a PSD, you can enable debug logging via the `PSD_DEBUG` environment variable. For example:
|
data/lib/psd.rb
CHANGED
@@ -1,23 +1,29 @@
|
|
1
|
+
require 'forwardable'
|
1
2
|
require 'psd/enginedata'
|
2
3
|
require 'chunky_png'
|
3
4
|
require 'xmp'
|
4
|
-
|
5
|
-
|
6
|
-
require '
|
7
|
-
require '
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
5
|
+
|
6
|
+
require 'psd/blend_mode'
|
7
|
+
require 'psd/channel_image'
|
8
|
+
require 'psd/color'
|
9
|
+
require 'psd/descriptor'
|
10
|
+
require 'psd/file'
|
11
|
+
require 'psd/header'
|
12
|
+
require 'psd/helpers'
|
13
|
+
require 'psd/image'
|
14
|
+
require 'psd/layer'
|
15
|
+
require 'psd/layer_info'
|
16
|
+
require 'psd/layer_mask'
|
17
|
+
require 'psd/lazy_execute'
|
18
|
+
require 'psd/logger'
|
19
|
+
require 'psd/mask'
|
20
|
+
require 'psd/node'
|
21
|
+
require 'psd/path_record'
|
22
|
+
require 'psd/renderer'
|
23
|
+
require 'psd/resources'
|
24
|
+
require 'psd/slices'
|
25
|
+
require 'psd/util'
|
26
|
+
require 'psd/version'
|
21
27
|
|
22
28
|
# A general purpose parser for Photoshop files. PSDs are broken up in to 4 logical sections:
|
23
29
|
# the header, resources, the layer mask (including layers), and the preview image. We parse
|
@@ -25,6 +31,7 @@ end
|
|
25
31
|
class PSD
|
26
32
|
include Logger
|
27
33
|
include Helpers
|
34
|
+
include Slices
|
28
35
|
|
29
36
|
attr_reader :file, :opts
|
30
37
|
alias :options :opts
|
data/lib/psd/channel_image.rb
CHANGED
data/lib/psd/helpers.rb
CHANGED
data/lib/psd/image.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
|
+
require 'psd/image_formats/raw'
|
2
|
+
require 'psd/image_formats/rle'
|
3
|
+
require 'psd/image_modes/cmyk'
|
4
|
+
require 'psd/image_modes/greyscale'
|
5
|
+
require 'psd/image_modes/rgb'
|
6
|
+
require 'psd/image_exports/png'
|
7
|
+
|
1
8
|
class PSD
|
2
9
|
# Parses the full preview image at the end of the PSD document.
|
3
10
|
class Image
|
11
|
+
extend Forwardable
|
4
12
|
include ImageFormat::RAW
|
5
13
|
include ImageFormat::RLE
|
6
14
|
include ImageMode::CMYK
|
@@ -11,6 +19,9 @@ class PSD
|
|
11
19
|
attr_reader :pixel_data, :opacity, :has_mask
|
12
20
|
alias :has_mask? :has_mask
|
13
21
|
|
22
|
+
# We delegate a few useful methods to the header.
|
23
|
+
def_delegators :@header, :height, :width, :channels, :depth, :mode
|
24
|
+
|
14
25
|
# All of the possible compression formats Photoshop uses.
|
15
26
|
COMPRESSIONS = [
|
16
27
|
'Raw',
|
@@ -60,13 +71,6 @@ class PSD
|
|
60
71
|
return self
|
61
72
|
end
|
62
73
|
|
63
|
-
# We delegate a few useful methods to the header.
|
64
|
-
[:height, :width, :channels, :depth, :mode].each do |attribute|
|
65
|
-
define_method attribute do
|
66
|
-
@header.send(attribute)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
74
|
private
|
71
75
|
|
72
76
|
def set_channels_info
|
data/lib/psd/layer.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
require 'psd/layer/blend_modes'
|
2
|
+
require 'psd/layer/blending_ranges'
|
3
|
+
require 'psd/layer/channel_image'
|
4
|
+
require 'psd/layer/exporting'
|
5
|
+
require 'psd/layer/helpers'
|
6
|
+
require 'psd/layer/info'
|
7
|
+
require 'psd/layer/mask'
|
8
|
+
require 'psd/layer/name'
|
9
|
+
require 'psd/layer/path_components'
|
10
|
+
require 'psd/layer/position_and_channels'
|
11
|
+
|
1
12
|
class PSD
|
2
13
|
# Represents a single layer and all of the data associated with
|
3
14
|
# that layer.
|
@@ -60,4 +71,4 @@ class PSD
|
|
60
71
|
self.send(val)
|
61
72
|
end
|
62
73
|
end
|
63
|
-
end
|
74
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class PSD
|
2
2
|
class Layer
|
3
3
|
module BlendModes
|
4
|
+
extend Forwardable
|
5
|
+
|
4
6
|
attr_reader :blend_mode
|
5
7
|
|
6
|
-
|
8
|
+
def_delegators :blend_mode, :opacity, :visible, :clipped?
|
7
9
|
alias_method :visible?, :visible
|
8
10
|
|
9
11
|
# Is this layer hidden?
|
@@ -27,4 +29,4 @@ class PSD
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
30
|
-
end
|
32
|
+
end
|
data/lib/psd/layer/info.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
require 'psd/layer/info/blend_clipping_elements'
|
2
|
+
require 'psd/layer/info/blend_interior_elements'
|
3
|
+
require 'psd/layer/info/fill_opacity'
|
4
|
+
require 'psd/layer/info/gradient_fill'
|
5
|
+
require 'psd/layer/info/layer_group'
|
6
|
+
require 'psd/layer/info/layer_id'
|
7
|
+
require 'psd/layer/info/layer_name_source'
|
8
|
+
require 'psd/layer/info/layer_section_divider'
|
9
|
+
require 'psd/layer/info/legacy_typetool'
|
10
|
+
require 'psd/layer/info/locked'
|
11
|
+
require 'psd/layer/info/metadata_setting'
|
12
|
+
require 'psd/layer/info/object_effects'
|
13
|
+
require 'psd/layer/info/pattern'
|
14
|
+
require 'psd/layer/info/placed_layer'
|
15
|
+
require 'psd/layer/info/reference_point'
|
16
|
+
require 'psd/layer/info/sheet_color'
|
17
|
+
require 'psd/layer/info/solid_color'
|
18
|
+
require 'psd/layer/info/typetool'
|
19
|
+
require 'psd/layer/info/unicode_name'
|
20
|
+
require 'psd/layer/info/vector_mask'
|
21
|
+
require 'psd/layer/info/vector_origination'
|
22
|
+
require 'psd/layer/info/vector_stroke'
|
23
|
+
require 'psd/layer/info/vector_stroke_content'
|
24
|
+
|
1
25
|
class PSD
|
2
26
|
class Layer
|
3
27
|
module Info
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/psd/node.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require 'psd/nodes/ancestry'
|
2
|
+
require 'psd/nodes/build_preview'
|
2
3
|
require 'psd/nodes/search'
|
3
4
|
require 'psd/nodes/layer_comps'
|
4
|
-
require 'psd/nodes/build_preview'
|
5
5
|
|
6
6
|
# Internal structure to help us build trees of a Photoshop documents.
|
7
7
|
# A lot of method names borrowed from the Ruby ancestry gem.
|
8
8
|
class PSD
|
9
9
|
module Node
|
10
10
|
class Base
|
11
|
+
extend Forwardable
|
12
|
+
|
11
13
|
include Enumerable
|
12
14
|
include Ancestry
|
13
15
|
include Search
|
@@ -17,13 +19,12 @@ class PSD
|
|
17
19
|
# Default properties that all nodes contain
|
18
20
|
PROPERTIES = [:name, :left, :right, :top, :bottom, :height, :width]
|
19
21
|
|
20
|
-
attr_reader :name, :parent
|
22
|
+
attr_reader :id, :name, :parent
|
21
23
|
attr_accessor :children, :layer, :force_visible, :top_offset, :left_offset
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
delegate :document_dimensions, to: :parent
|
25
|
+
def_delegators :parent, :psd, :document_dimensions
|
26
|
+
def_delegator :layer, :name
|
27
|
+
def_delegator :children, :each
|
27
28
|
|
28
29
|
def initialize(layer, parent = nil)
|
29
30
|
@layer = layer
|
@@ -32,6 +33,7 @@ class PSD
|
|
32
33
|
@parent = parent
|
33
34
|
@children = []
|
34
35
|
|
36
|
+
@id = begin layer.layer_id.id rescue nil end
|
35
37
|
@force_visible = nil
|
36
38
|
@top = @layer.top.to_i
|
37
39
|
@bottom = @layer.bottom.to_i
|
@@ -141,4 +143,8 @@ class PSD
|
|
141
143
|
end
|
142
144
|
end
|
143
145
|
end
|
144
|
-
end
|
146
|
+
end
|
147
|
+
|
148
|
+
require 'psd/nodes/group'
|
149
|
+
require 'psd/nodes/layer'
|
150
|
+
require 'psd/nodes/root'
|
data/lib/psd/nodes/ancestry.rb
CHANGED
@@ -2,102 +2,98 @@ class PSD
|
|
2
2
|
module Node
|
3
3
|
# Collection of methods to help in traversing the PSD tree structure.
|
4
4
|
module Ancestry
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
return self if is_root?
|
11
|
-
return parent.root
|
12
|
-
end
|
5
|
+
# Returns the root node
|
6
|
+
def root
|
7
|
+
return self if is_root?
|
8
|
+
return parent.root
|
9
|
+
end
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
# Is this node the root node?
|
12
|
+
def root?
|
13
|
+
self.is_a?(PSD::Node::Root)
|
14
|
+
end
|
15
|
+
alias :is_root? :root?
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
# Returns all ancestors in the path of this node. This
|
18
|
+
# does NOT return the root node.
|
19
|
+
def ancestors
|
20
|
+
return [] if parent.nil? || parent.is_root?
|
21
|
+
return parent.ancestors + [parent]
|
22
|
+
end
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
# Does this node have any children nodes?
|
25
|
+
def has_children?
|
26
|
+
children.length > 0
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
# Inverse of has_children?
|
30
|
+
def childless?
|
31
|
+
!has_children?
|
32
|
+
end
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
# Returns all sibling nodes including the current node. Can also
|
35
|
+
# be thought of as all children of the parent of this node.
|
36
|
+
def siblings
|
37
|
+
return [] if parent.nil?
|
38
|
+
parent.children
|
39
|
+
end
|
43
40
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
def next_sibling
|
42
|
+
return nil if parent.nil?
|
43
|
+
index = siblings.index(self)
|
44
|
+
siblings[index + 1]
|
45
|
+
end
|
49
46
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
47
|
+
def prev_sibling
|
48
|
+
return nil if parent.nil?
|
49
|
+
index = siblings.index(self)
|
50
|
+
siblings[index - 1]
|
51
|
+
end
|
55
52
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
# Does this node have any siblings?
|
54
|
+
def has_siblings?
|
55
|
+
siblings.length > 1
|
56
|
+
end
|
60
57
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
# Is this node the only descendant of its parent?
|
59
|
+
def only_child?
|
60
|
+
siblings.length == 1
|
61
|
+
end
|
65
62
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
63
|
+
# Recursively get all descendant nodes, not including this node.
|
64
|
+
def descendants
|
65
|
+
children.map(&:subtree).flatten
|
66
|
+
end
|
70
67
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
68
|
+
# Same as descendants, except it includes this node.
|
69
|
+
def subtree
|
70
|
+
[self] + descendants
|
71
|
+
end
|
75
72
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
73
|
+
# Depth from the root node. Root depth is 0.
|
74
|
+
def depth
|
75
|
+
return ancestors.length + 1
|
76
|
+
end
|
80
77
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
78
|
+
def path(as_array = false)
|
79
|
+
path = (ancestors.map(&:name) + [name])
|
80
|
+
as_array ? path : path.join('/')
|
81
|
+
end
|
85
82
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
83
|
+
def method_missing(method, *args, &block)
|
84
|
+
test = /^(.+)_(layers|groups)$/.match(method)
|
85
|
+
if test
|
86
|
+
m = self.respond_to?(test[1]) ? test[1] : "#{test[1]}s"
|
87
|
+
self.send(m).select &method("#{test[2]}_only")
|
88
|
+
else
|
89
|
+
super
|
94
90
|
end
|
91
|
+
end
|
95
92
|
|
96
|
-
|
93
|
+
private
|
97
94
|
|
98
|
-
|
99
|
-
|
100
|
-
end
|
95
|
+
def layers_only(d); d.layer?; end
|
96
|
+
def groups_only(d); d.group?(false); end
|
101
97
|
end
|
102
98
|
end
|
103
|
-
end
|
99
|
+
end
|
data/lib/psd/nodes/layer.rb
CHANGED
@@ -3,12 +3,12 @@ require 'psd/node'
|
|
3
3
|
class PSD
|
4
4
|
module Node
|
5
5
|
class Layer < PSD::Node::Base
|
6
|
+
extend Forwardable
|
7
|
+
|
6
8
|
attr_reader :layer
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
delegate "#{prop}=", to: :@layer
|
11
|
-
end
|
10
|
+
def_delegators :@layer, :text, :ref_x, :ref_y, :blending_mode
|
11
|
+
def_delegators :@layer, :text=, :ref_x=, :ref_y=, :blending_mode=
|
12
12
|
|
13
13
|
def empty?
|
14
14
|
width == 0 || height == 0
|
@@ -42,4 +42,4 @@ class PSD
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
end
|
45
|
+
end
|
data/lib/psd/nodes/search.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
class PSD
|
2
2
|
module Node
|
3
3
|
module Search
|
4
|
+
def find_by_id(id)
|
5
|
+
subtree.select { |n| n.id == id }.first
|
6
|
+
end
|
7
|
+
|
4
8
|
# Searches the tree structure for a node at the given path. The path is
|
5
9
|
# defined by the layer/folder names. Because the PSD format does not
|
6
10
|
# require unique layer/folder names, we always return an array of all
|
@@ -27,4 +31,4 @@ class PSD
|
|
27
31
|
alias :children_with_path :children_at_path
|
28
32
|
end
|
29
33
|
end
|
30
|
-
end
|
34
|
+
end
|
data/lib/psd/renderer.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
+
require 'psd/renderer/blender'
|
2
|
+
require 'psd/renderer/canvas'
|
1
3
|
require 'psd/renderer/canvas_management'
|
4
|
+
require 'psd/renderer/clipping_mask'
|
5
|
+
require 'psd/renderer/compose'
|
6
|
+
require 'psd/renderer/layer_styles'
|
7
|
+
require 'psd/renderer/mask'
|
8
|
+
require 'psd/renderer/mask_canvas'
|
2
9
|
|
3
10
|
class PSD
|
4
11
|
class Renderer
|
@@ -92,4 +99,4 @@ class PSD
|
|
92
99
|
@node_stack.last
|
93
100
|
end
|
94
101
|
end
|
95
|
-
end
|
102
|
+
end
|
data/lib/psd/renderer/canvas.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
class PSD
|
2
2
|
class Renderer
|
3
3
|
class Canvas
|
4
|
+
extend Forwardable
|
5
|
+
|
4
6
|
attr_reader :canvas, :node, :opts, :width, :height, :opacity, :fill_opacity
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
def_delegators :node, :top, :right, :bottom, :left
|
9
|
+
def_delegators :canvas, :[], :[]=, :get_pixel, :set_pixel
|
8
10
|
|
9
11
|
def initialize(node, width = nil, height = nil, opts = {})
|
10
12
|
@node = node
|
data/lib/psd/resources.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'psd/resource_section'
|
2
|
+
require 'psd/resource'
|
3
|
+
require 'psd/resources/base'
|
4
|
+
|
1
5
|
class PSD
|
2
6
|
# Parses and reads all of the Resource records in the document.
|
3
7
|
class Resources
|
@@ -51,4 +55,4 @@ class PSD
|
|
51
55
|
@length ||= @file.read_int
|
52
56
|
end
|
53
57
|
end
|
54
|
-
end
|
58
|
+
end
|
data/lib/psd/resources/base.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'psd/resources/base'
|
2
|
-
|
3
1
|
class PSD
|
4
2
|
class Resource
|
5
3
|
module Section
|
@@ -24,4 +22,9 @@ class PSD
|
|
24
22
|
end
|
25
23
|
end
|
26
24
|
end
|
27
|
-
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'psd/resources/guides'
|
28
|
+
require 'psd/resources/layer_comps'
|
29
|
+
require 'psd/resources/slices'
|
30
|
+
require 'psd/resources/xmp_metadata'
|
data/lib/psd/slice.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
class PSD
|
2
|
+
class Slice
|
3
|
+
attr_reader :id, :group_id, :origin, :associated_layer_id, :name, :type,
|
4
|
+
:bounds, :url, :target, :message, :alt, :cell_text_is_html,
|
5
|
+
:cell_text, :horizontal_alignment, :vertical_alignment,
|
6
|
+
:color
|
7
|
+
|
8
|
+
def initialize(psd, data)
|
9
|
+
@psd = psd
|
10
|
+
data.each do |k, v|
|
11
|
+
instance_variable_set("@#{k}", v)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
[:left, :top, :right, :bottom].each do |dir|
|
16
|
+
define_method(dir) { @bounds[dir] }
|
17
|
+
end
|
18
|
+
|
19
|
+
def width
|
20
|
+
right - left
|
21
|
+
end
|
22
|
+
|
23
|
+
def height
|
24
|
+
bottom - top
|
25
|
+
end
|
26
|
+
|
27
|
+
def associated_layer
|
28
|
+
@psd.tree.find_by_id(associated_layer_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_png
|
32
|
+
@png ||= @psd.image.to_png.crop(left, top, width, height)
|
33
|
+
end
|
34
|
+
|
35
|
+
def save_as_png(file)
|
36
|
+
@png.save(file, :fast_rgba)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/psd/slices.rb
ADDED
data/lib/psd/version.rb
CHANGED
data/psd.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan LeFevre
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-03-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -53,20 +53,6 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: activesupport
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
56
|
- !ruby/object:Gem::Dependency
|
71
57
|
name: xmp
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,34 +164,34 @@ files:
|
|
178
164
|
- lib/psd/layer/exporting.rb
|
179
165
|
- lib/psd/layer/helpers.rb
|
180
166
|
- lib/psd/layer/info.rb
|
167
|
+
- lib/psd/layer/info/blend_clipping_elements.rb
|
168
|
+
- lib/psd/layer/info/blend_interior_elements.rb
|
169
|
+
- lib/psd/layer/info/fill_opacity.rb
|
170
|
+
- lib/psd/layer/info/gradient_fill.rb
|
171
|
+
- lib/psd/layer/info/layer_group.rb
|
172
|
+
- lib/psd/layer/info/layer_id.rb
|
173
|
+
- lib/psd/layer/info/layer_name_source.rb
|
174
|
+
- lib/psd/layer/info/layer_section_divider.rb
|
175
|
+
- lib/psd/layer/info/legacy_typetool.rb
|
176
|
+
- lib/psd/layer/info/locked.rb
|
177
|
+
- lib/psd/layer/info/metadata_setting.rb
|
178
|
+
- lib/psd/layer/info/object_effects.rb
|
179
|
+
- lib/psd/layer/info/pattern.rb
|
180
|
+
- lib/psd/layer/info/placed_layer.rb
|
181
|
+
- lib/psd/layer/info/reference_point.rb
|
182
|
+
- lib/psd/layer/info/sheet_color.rb
|
183
|
+
- lib/psd/layer/info/solid_color.rb
|
184
|
+
- lib/psd/layer/info/typetool.rb
|
185
|
+
- lib/psd/layer/info/unicode_name.rb
|
186
|
+
- lib/psd/layer/info/vector_mask.rb
|
187
|
+
- lib/psd/layer/info/vector_origination.rb
|
188
|
+
- lib/psd/layer/info/vector_stroke.rb
|
189
|
+
- lib/psd/layer/info/vector_stroke_content.rb
|
181
190
|
- lib/psd/layer/mask.rb
|
182
191
|
- lib/psd/layer/name.rb
|
183
192
|
- lib/psd/layer/path_components.rb
|
184
193
|
- lib/psd/layer/position_and_channels.rb
|
185
194
|
- lib/psd/layer_info.rb
|
186
|
-
- lib/psd/layer_info/blend_clipping_elements.rb
|
187
|
-
- lib/psd/layer_info/blend_interior_elements.rb
|
188
|
-
- lib/psd/layer_info/fill_opacity.rb
|
189
|
-
- lib/psd/layer_info/gradient_fill.rb
|
190
|
-
- lib/psd/layer_info/layer_group.rb
|
191
|
-
- lib/psd/layer_info/layer_id.rb
|
192
|
-
- lib/psd/layer_info/layer_name_source.rb
|
193
|
-
- lib/psd/layer_info/layer_section_divider.rb
|
194
|
-
- lib/psd/layer_info/legacy_typetool.rb
|
195
|
-
- lib/psd/layer_info/locked.rb
|
196
|
-
- lib/psd/layer_info/metadata_setting.rb
|
197
|
-
- lib/psd/layer_info/object_effects.rb
|
198
|
-
- lib/psd/layer_info/pattern.rb
|
199
|
-
- lib/psd/layer_info/placed_layer.rb
|
200
|
-
- lib/psd/layer_info/reference_point.rb
|
201
|
-
- lib/psd/layer_info/sheet_color.rb
|
202
|
-
- lib/psd/layer_info/solid_color.rb
|
203
|
-
- lib/psd/layer_info/typetool.rb
|
204
|
-
- lib/psd/layer_info/unicode_name.rb
|
205
|
-
- lib/psd/layer_info/vector_mask.rb
|
206
|
-
- lib/psd/layer_info/vector_origination.rb
|
207
|
-
- lib/psd/layer_info/vector_stroke.rb
|
208
|
-
- lib/psd/layer_info/vector_stroke_content.rb
|
209
195
|
- lib/psd/layer_mask.rb
|
210
196
|
- lib/psd/lazy_execute.rb
|
211
197
|
- lib/psd/logger.rb
|
@@ -239,6 +225,8 @@ files:
|
|
239
225
|
- lib/psd/resources/layer_comps.rb
|
240
226
|
- lib/psd/resources/slices.rb
|
241
227
|
- lib/psd/resources/xmp_metadata.rb
|
228
|
+
- lib/psd/slice.rb
|
229
|
+
- lib/psd/slices.rb
|
242
230
|
- lib/psd/util.rb
|
243
231
|
- lib/psd/version.rb
|
244
232
|
- psd.gemspec
|
@@ -285,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
273
|
version: '0'
|
286
274
|
requirements: []
|
287
275
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.
|
276
|
+
rubygems_version: 2.4.5
|
289
277
|
signing_key:
|
290
278
|
specification_version: 4
|
291
279
|
summary: General purpose library for parsing Photoshop files
|