psd 2.1.2 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +2 -0
- data/README.md +60 -20
- data/lib/psd/blend_mode.rb +46 -38
- data/lib/psd/channel_image.rb +11 -5
- data/lib/psd/color.rb +14 -5
- data/lib/psd/descriptor.rb +39 -16
- data/lib/psd/file.rb +9 -6
- data/lib/psd/header.rb +38 -33
- data/lib/psd/helpers.rb +2 -2
- data/lib/psd/image.rb +21 -16
- data/lib/psd/image_formats/layer_rle.rb +2 -2
- data/lib/psd/image_formats/rle.rb +4 -10
- data/lib/psd/image_modes/cmyk.rb +18 -5
- data/lib/psd/image_modes/greyscale.rb +6 -1
- data/lib/psd/image_modes/rgb.rb +17 -5
- data/lib/psd/layer/blend_modes.rb +15 -13
- data/lib/psd/layer/helpers.rb +8 -10
- data/lib/psd/layer/info/black_white.rb +33 -0
- data/lib/psd/{layer_info → layer/info}/blend_clipping_elements.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/blend_interior_elements.rb +4 -2
- data/lib/psd/layer/info/brightness_contrast.rb +21 -0
- data/lib/psd/layer/info/channel_blending_restrictions.rb +27 -0
- data/lib/psd/layer/info/channel_mixer.rb +27 -0
- data/lib/psd/layer/info/color_balance.rb +23 -0
- data/lib/psd/layer/info/color_lookup.rb +14 -0
- data/lib/psd/layer/info/content_generator.rb +42 -0
- data/lib/psd/layer/info/curves.rb +78 -0
- data/lib/psd/layer/info/effects_layer.rb +174 -0
- data/lib/psd/layer/info/exposure.rb +20 -0
- data/lib/psd/{layer_info → layer/info}/fill_opacity.rb +4 -2
- data/lib/psd/layer/info/gradient_fill.rb +14 -0
- data/lib/psd/layer/info/gradient_map.rb +69 -0
- data/lib/psd/layer/info/hue_saturation.rb +41 -0
- data/lib/psd/layer/info/invert.rb +17 -0
- data/lib/psd/layer/info/knockout.rb +22 -0
- data/lib/psd/layer/info/layer_effects.rb +16 -0
- data/lib/psd/{layer_info → layer/info}/layer_group.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/layer_id.rb +4 -2
- data/lib/psd/layer/info/layer_mask_as_global_mask.rb +16 -0
- data/lib/psd/{layer_info → layer/info}/layer_name_source.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/layer_section_divider.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/legacy_typetool.rb +6 -4
- data/lib/psd/layer/info/levels.rb +48 -0
- data/lib/psd/{layer_info → layer/info}/locked.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/metadata_setting.rb +5 -3
- data/lib/psd/{layer_info → layer/info}/object_effects.rb +5 -5
- data/lib/psd/layer/info/pattern.rb +14 -0
- data/lib/psd/layer/info/pattern_fill.rb +15 -0
- data/lib/psd/layer/info/photo_filter.rb +44 -0
- data/lib/psd/{layer_info → layer/info}/placed_layer.rb +4 -2
- data/lib/psd/layer/info/posterize.rb +16 -0
- data/lib/psd/{layer_info → layer/info}/reference_point.rb +4 -2
- data/lib/psd/layer/info/selective_color.rb +32 -0
- data/lib/psd/layer/info/sheet_color.rb +36 -0
- data/lib/psd/layer/info/solid_color.rb +36 -0
- data/lib/psd/layer/info/threshold.rb +16 -0
- data/lib/psd/layer/info/transparency_shapes_layer.rb +16 -0
- data/lib/psd/{layer_info → layer/info}/typetool.rb +27 -13
- data/lib/psd/{layer_info → layer/info}/unicode_name.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/vector_mask.rb +7 -5
- data/lib/psd/layer/info/vector_mask_as_global_mask.rb +16 -0
- data/lib/psd/layer/info/vector_origination.rb +14 -0
- data/lib/psd/{layer_info → layer/info}/vector_stroke.rb +4 -2
- data/lib/psd/{layer_info → layer/info}/vector_stroke_content.rb +4 -2
- data/lib/psd/layer/info/vibrance.rb +22 -0
- data/lib/psd/layer/info.rb +106 -19
- data/lib/psd/layer/position_and_channels.rb +2 -6
- data/lib/psd/layer.rb +13 -16
- data/lib/psd/layer_info.rb +0 -4
- data/lib/psd/layer_mask.rb +61 -50
- data/lib/psd/lazy_execute.rb +5 -1
- data/lib/psd/mask.rb +7 -1
- data/lib/psd/node.rb +142 -49
- data/lib/psd/nodes/ancestry.rb +7 -6
- data/lib/psd/nodes/build_preview.rb +4 -4
- data/lib/psd/nodes/group.rb +36 -0
- data/lib/psd/nodes/layer.rb +45 -0
- data/lib/psd/nodes/layer_comps.rb +93 -0
- data/lib/psd/nodes/locking.rb +36 -0
- data/lib/psd/nodes/root.rb +87 -0
- data/lib/psd/nodes/search.rb +8 -65
- data/lib/psd/path_record.rb +5 -70
- data/lib/psd/renderer/blender.rb +10 -5
- data/lib/psd/renderer/cairo_helpers.rb +46 -0
- data/lib/psd/renderer/canvas.rb +41 -20
- data/lib/psd/renderer/canvas_management.rb +2 -2
- data/lib/psd/renderer/clipping_mask.rb +5 -4
- data/lib/psd/renderer/compose.rb +59 -69
- data/lib/psd/renderer/layer_styles/color_overlay.rb +45 -27
- data/lib/psd/renderer/layer_styles.rb +15 -5
- data/lib/psd/renderer/mask.rb +26 -22
- data/lib/psd/renderer/mask_canvas.rb +12 -0
- data/lib/psd/renderer/vector_shape.rb +239 -0
- data/lib/psd/renderer.rb +18 -7
- data/lib/psd/resource_section.rb +13 -6
- data/lib/psd/resources/base.rb +33 -0
- data/lib/psd/resources/guides.rb +6 -4
- data/lib/psd/resources/layer_comps.rb +6 -4
- data/lib/psd/resources/resolution_info.rb +48 -0
- data/lib/psd/resources/saved_path.rb +19 -0
- data/lib/psd/resources/slices.rb +7 -5
- data/lib/psd/resources/work_path.rb +22 -0
- data/lib/psd/resources/xmp_metadata.rb +46 -0
- data/lib/psd/resources.rb +17 -21
- data/lib/psd/slice.rb +44 -0
- data/lib/psd/slices.rb +13 -0
- data/lib/psd/util.rb +4 -2
- data/lib/psd/version.rb +1 -1
- data/lib/psd.rb +31 -45
- data/psd.gemspec +2 -3
- data/spec/files/alignment_modes.psd +0 -0
- data/spec/files/blendmodes.psd +0 -0
- data/spec/files/example.psb +0 -0
- data/spec/hierarchy_spec.rb +5 -0
- data/spec/locked_spec.rb +8 -8
- data/spec/psb_parsing_spec.rb +57 -0
- data/spec/text_spec.rb +13 -1
- metadata +115 -75
- data/circle.yml +0 -6
- data/lib/psd/layer_info/vector_mask_2.rb +0 -10
- data/lib/psd/node_exporting.rb +0 -20
- data/lib/psd/node_group.rb +0 -86
- data/lib/psd/node_layer.rb +0 -81
- data/lib/psd/node_root.rb +0 -93
- data/lib/psd/nodes/has_children.rb +0 -13
- data/lib/psd/nodes/lock_to_origin.rb +0 -7
- data/lib/psd/nodes/parse_layers.rb +0 -18
- data/lib/psd/renderer/layer_styles/drop_shadow.rb +0 -75
- data/lib/psd/section.rb +0 -26
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:
|
4
|
+
version: 3.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan LeFevre
|
@@ -9,118 +9,118 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-01-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: psd-enginedata
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '1'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: chunky_png
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: xmp
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: guard
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: guard-rspec
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rb-fsevent
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - ~>
|
116
|
+
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0.9'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - ~>
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0.9'
|
126
126
|
description: Parse Photoshop PSD files with ease
|
@@ -131,16 +131,15 @@ executables: []
|
|
131
131
|
extensions: []
|
132
132
|
extra_rdoc_files: []
|
133
133
|
files:
|
134
|
-
- .gitignore
|
135
|
-
- .rspec
|
136
|
-
- .travis.yml
|
134
|
+
- ".gitignore"
|
135
|
+
- ".rspec"
|
136
|
+
- ".travis.yml"
|
137
137
|
- CONTRIBUTING.md
|
138
138
|
- Gemfile
|
139
139
|
- Guardfile
|
140
140
|
- LICENSE.txt
|
141
141
|
- README.md
|
142
142
|
- Rakefile
|
143
|
-
- circle.yml
|
144
143
|
- lib/psd.rb
|
145
144
|
- lib/psd/blend_mode.rb
|
146
145
|
- lib/psd/channel_image.rb
|
@@ -165,69 +164,106 @@ files:
|
|
165
164
|
- lib/psd/layer/exporting.rb
|
166
165
|
- lib/psd/layer/helpers.rb
|
167
166
|
- lib/psd/layer/info.rb
|
167
|
+
- lib/psd/layer/info/black_white.rb
|
168
|
+
- lib/psd/layer/info/blend_clipping_elements.rb
|
169
|
+
- lib/psd/layer/info/blend_interior_elements.rb
|
170
|
+
- lib/psd/layer/info/brightness_contrast.rb
|
171
|
+
- lib/psd/layer/info/channel_blending_restrictions.rb
|
172
|
+
- lib/psd/layer/info/channel_mixer.rb
|
173
|
+
- lib/psd/layer/info/color_balance.rb
|
174
|
+
- lib/psd/layer/info/color_lookup.rb
|
175
|
+
- lib/psd/layer/info/content_generator.rb
|
176
|
+
- lib/psd/layer/info/curves.rb
|
177
|
+
- lib/psd/layer/info/effects_layer.rb
|
178
|
+
- lib/psd/layer/info/exposure.rb
|
179
|
+
- lib/psd/layer/info/fill_opacity.rb
|
180
|
+
- lib/psd/layer/info/gradient_fill.rb
|
181
|
+
- lib/psd/layer/info/gradient_map.rb
|
182
|
+
- lib/psd/layer/info/hue_saturation.rb
|
183
|
+
- lib/psd/layer/info/invert.rb
|
184
|
+
- lib/psd/layer/info/knockout.rb
|
185
|
+
- lib/psd/layer/info/layer_effects.rb
|
186
|
+
- lib/psd/layer/info/layer_group.rb
|
187
|
+
- lib/psd/layer/info/layer_id.rb
|
188
|
+
- lib/psd/layer/info/layer_mask_as_global_mask.rb
|
189
|
+
- lib/psd/layer/info/layer_name_source.rb
|
190
|
+
- lib/psd/layer/info/layer_section_divider.rb
|
191
|
+
- lib/psd/layer/info/legacy_typetool.rb
|
192
|
+
- lib/psd/layer/info/levels.rb
|
193
|
+
- lib/psd/layer/info/locked.rb
|
194
|
+
- lib/psd/layer/info/metadata_setting.rb
|
195
|
+
- lib/psd/layer/info/object_effects.rb
|
196
|
+
- lib/psd/layer/info/pattern.rb
|
197
|
+
- lib/psd/layer/info/pattern_fill.rb
|
198
|
+
- lib/psd/layer/info/photo_filter.rb
|
199
|
+
- lib/psd/layer/info/placed_layer.rb
|
200
|
+
- lib/psd/layer/info/posterize.rb
|
201
|
+
- lib/psd/layer/info/reference_point.rb
|
202
|
+
- lib/psd/layer/info/selective_color.rb
|
203
|
+
- lib/psd/layer/info/sheet_color.rb
|
204
|
+
- lib/psd/layer/info/solid_color.rb
|
205
|
+
- lib/psd/layer/info/threshold.rb
|
206
|
+
- lib/psd/layer/info/transparency_shapes_layer.rb
|
207
|
+
- lib/psd/layer/info/typetool.rb
|
208
|
+
- lib/psd/layer/info/unicode_name.rb
|
209
|
+
- lib/psd/layer/info/vector_mask.rb
|
210
|
+
- lib/psd/layer/info/vector_mask_as_global_mask.rb
|
211
|
+
- lib/psd/layer/info/vector_origination.rb
|
212
|
+
- lib/psd/layer/info/vector_stroke.rb
|
213
|
+
- lib/psd/layer/info/vector_stroke_content.rb
|
214
|
+
- lib/psd/layer/info/vibrance.rb
|
168
215
|
- lib/psd/layer/mask.rb
|
169
216
|
- lib/psd/layer/name.rb
|
170
217
|
- lib/psd/layer/path_components.rb
|
171
218
|
- lib/psd/layer/position_and_channels.rb
|
172
219
|
- lib/psd/layer_info.rb
|
173
|
-
- lib/psd/layer_info/blend_clipping_elements.rb
|
174
|
-
- lib/psd/layer_info/blend_interior_elements.rb
|
175
|
-
- lib/psd/layer_info/fill_opacity.rb
|
176
|
-
- lib/psd/layer_info/layer_group.rb
|
177
|
-
- lib/psd/layer_info/layer_id.rb
|
178
|
-
- lib/psd/layer_info/layer_name_source.rb
|
179
|
-
- lib/psd/layer_info/layer_section_divider.rb
|
180
|
-
- lib/psd/layer_info/legacy_typetool.rb
|
181
|
-
- lib/psd/layer_info/locked.rb
|
182
|
-
- lib/psd/layer_info/metadata_setting.rb
|
183
|
-
- lib/psd/layer_info/object_effects.rb
|
184
|
-
- lib/psd/layer_info/placed_layer.rb
|
185
|
-
- lib/psd/layer_info/reference_point.rb
|
186
|
-
- lib/psd/layer_info/typetool.rb
|
187
|
-
- lib/psd/layer_info/unicode_name.rb
|
188
|
-
- lib/psd/layer_info/vector_mask.rb
|
189
|
-
- lib/psd/layer_info/vector_mask_2.rb
|
190
|
-
- lib/psd/layer_info/vector_stroke.rb
|
191
|
-
- lib/psd/layer_info/vector_stroke_content.rb
|
192
220
|
- lib/psd/layer_mask.rb
|
193
221
|
- lib/psd/lazy_execute.rb
|
194
222
|
- lib/psd/logger.rb
|
195
223
|
- lib/psd/mask.rb
|
196
224
|
- lib/psd/node.rb
|
197
|
-
- lib/psd/node_exporting.rb
|
198
|
-
- lib/psd/node_group.rb
|
199
|
-
- lib/psd/node_layer.rb
|
200
|
-
- lib/psd/node_root.rb
|
201
225
|
- lib/psd/nodes/ancestry.rb
|
202
226
|
- lib/psd/nodes/build_preview.rb
|
203
|
-
- lib/psd/nodes/
|
204
|
-
- lib/psd/nodes/
|
205
|
-
- lib/psd/nodes/
|
227
|
+
- lib/psd/nodes/group.rb
|
228
|
+
- lib/psd/nodes/layer.rb
|
229
|
+
- lib/psd/nodes/layer_comps.rb
|
230
|
+
- lib/psd/nodes/locking.rb
|
231
|
+
- lib/psd/nodes/root.rb
|
206
232
|
- lib/psd/nodes/search.rb
|
207
233
|
- lib/psd/path_record.rb
|
208
234
|
- lib/psd/renderer.rb
|
209
235
|
- lib/psd/renderer/blender.rb
|
236
|
+
- lib/psd/renderer/cairo_helpers.rb
|
210
237
|
- lib/psd/renderer/canvas.rb
|
211
238
|
- lib/psd/renderer/canvas_management.rb
|
212
239
|
- lib/psd/renderer/clipping_mask.rb
|
213
240
|
- lib/psd/renderer/compose.rb
|
214
241
|
- lib/psd/renderer/layer_styles.rb
|
215
242
|
- lib/psd/renderer/layer_styles/color_overlay.rb
|
216
|
-
- lib/psd/renderer/layer_styles/drop_shadow.rb
|
217
243
|
- lib/psd/renderer/mask.rb
|
244
|
+
- lib/psd/renderer/mask_canvas.rb
|
245
|
+
- lib/psd/renderer/vector_shape.rb
|
218
246
|
- lib/psd/resource.rb
|
219
247
|
- lib/psd/resource_section.rb
|
220
248
|
- lib/psd/resources.rb
|
249
|
+
- lib/psd/resources/base.rb
|
221
250
|
- lib/psd/resources/guides.rb
|
222
251
|
- lib/psd/resources/layer_comps.rb
|
252
|
+
- lib/psd/resources/resolution_info.rb
|
253
|
+
- lib/psd/resources/saved_path.rb
|
223
254
|
- lib/psd/resources/slices.rb
|
224
|
-
- lib/psd/
|
255
|
+
- lib/psd/resources/work_path.rb
|
256
|
+
- lib/psd/resources/xmp_metadata.rb
|
257
|
+
- lib/psd/slice.rb
|
258
|
+
- lib/psd/slices.rb
|
225
259
|
- lib/psd/util.rb
|
226
260
|
- lib/psd/version.rb
|
227
261
|
- psd.gemspec
|
262
|
+
- spec/files/alignment_modes.psd
|
228
263
|
- spec/files/blendmodes.psd
|
229
264
|
- spec/files/empty-layer-subgroups.psd
|
230
265
|
- spec/files/empty-layer.psd
|
266
|
+
- spec/files/example.psb
|
231
267
|
- spec/files/example.psd
|
232
268
|
- spec/files/guides.psd
|
233
269
|
- spec/files/locked.psd
|
@@ -243,6 +279,7 @@ files:
|
|
243
279
|
- spec/lazy_execute_spec.rb
|
244
280
|
- spec/locked_spec.rb
|
245
281
|
- spec/parsing_spec.rb
|
282
|
+
- spec/psb_parsing_spec.rb
|
246
283
|
- spec/psd_spec.rb
|
247
284
|
- spec/slices_spec.rb
|
248
285
|
- spec/spec_helper.rb
|
@@ -257,40 +294,43 @@ require_paths:
|
|
257
294
|
- lib
|
258
295
|
required_ruby_version: !ruby/object:Gem::Requirement
|
259
296
|
requirements:
|
260
|
-
- -
|
297
|
+
- - ">="
|
261
298
|
- !ruby/object:Gem::Version
|
262
299
|
version: '0'
|
263
300
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
301
|
requirements:
|
265
|
-
- -
|
302
|
+
- - ">="
|
266
303
|
- !ruby/object:Gem::Version
|
267
304
|
version: '0'
|
268
305
|
requirements: []
|
269
306
|
rubyforge_project:
|
270
|
-
rubygems_version: 2.
|
307
|
+
rubygems_version: 2.7.0
|
271
308
|
signing_key:
|
272
309
|
specification_version: 4
|
273
310
|
summary: General purpose library for parsing Photoshop files
|
274
311
|
test_files:
|
275
|
-
- spec/
|
276
|
-
- spec/
|
312
|
+
- spec/spec_helper.rb
|
313
|
+
- spec/psb_parsing_spec.rb
|
314
|
+
- spec/slices_spec.rb
|
315
|
+
- spec/guides_spec.rb
|
316
|
+
- spec/parsing_spec.rb
|
317
|
+
- spec/image_spec.rb
|
318
|
+
- spec/lazy_execute_spec.rb
|
319
|
+
- spec/locked_spec.rb
|
320
|
+
- spec/text_spec.rb
|
321
|
+
- spec/files/slices.psd
|
277
322
|
- spec/files/empty-layer.psd
|
278
|
-
- spec/files/example.psd
|
279
|
-
- spec/files/guides.psd
|
280
|
-
- spec/files/locked.psd
|
281
|
-
- spec/files/one_layer.psd
|
282
323
|
- spec/files/path.psd
|
283
324
|
- spec/files/pixel.psd
|
325
|
+
- spec/files/one_layer.psd
|
326
|
+
- spec/files/alignment_modes.psd
|
327
|
+
- spec/files/locked.psd
|
284
328
|
- spec/files/simplest.psd
|
285
|
-
- spec/files/
|
329
|
+
- spec/files/blendmodes.psd
|
330
|
+
- spec/files/example.psd
|
286
331
|
- spec/files/text.psd
|
287
|
-
- spec/
|
332
|
+
- spec/files/example.psb
|
333
|
+
- spec/files/empty-layer-subgroups.psd
|
334
|
+
- spec/files/guides.psd
|
288
335
|
- spec/hierarchy_spec.rb
|
289
|
-
- spec/image_spec.rb
|
290
|
-
- spec/lazy_execute_spec.rb
|
291
|
-
- spec/locked_spec.rb
|
292
|
-
- spec/parsing_spec.rb
|
293
336
|
- spec/psd_spec.rb
|
294
|
-
- spec/slices_spec.rb
|
295
|
-
- spec/spec_helper.rb
|
296
|
-
- spec/text_spec.rb
|
data/circle.yml
DELETED
data/lib/psd/node_exporting.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class PSD
|
2
|
-
module NodeExporting #:nodoc:
|
3
|
-
def export_node(node, path)
|
4
|
-
hide_all_nodes
|
5
|
-
node.show!
|
6
|
-
node.lock_to_origin
|
7
|
-
|
8
|
-
width_difference_factor = @header.cols.to_f / node.width
|
9
|
-
height_difference_factor = @header.rows.to_f / node.height
|
10
|
-
@header.cols, @header.rows = node.width, node.height
|
11
|
-
|
12
|
-
node.scale_path_components(width_difference_factor, height_difference_factor)
|
13
|
-
export path
|
14
|
-
end
|
15
|
-
|
16
|
-
def hide_all_nodes
|
17
|
-
tree.descendants.map(&:hide!)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/psd/node_group.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require_relative 'node'
|
2
|
-
|
3
|
-
class PSD::Node
|
4
|
-
# Represents a group, or folder, in the PSD document. It can have
|
5
|
-
# zero or more children nodes.
|
6
|
-
class Group < PSD::Node
|
7
|
-
include PSD::HasChildren
|
8
|
-
include PSD::Node::LockToOrigin
|
9
|
-
|
10
|
-
attr_reader :name, :top, :left, :bottom, :right
|
11
|
-
|
12
|
-
# Parses the descendant tree structure and figures out the bounds
|
13
|
-
# of the layers within this folder.
|
14
|
-
def initialize(folder)
|
15
|
-
@name = folder[:name]
|
16
|
-
@layer = folder[:layer]
|
17
|
-
|
18
|
-
super(folder[:layers])
|
19
|
-
get_dimensions
|
20
|
-
end
|
21
|
-
|
22
|
-
# Calculated height of this folder.
|
23
|
-
def rows
|
24
|
-
@bottom - @top
|
25
|
-
end
|
26
|
-
alias :height :rows
|
27
|
-
|
28
|
-
# Calculated width of this folder.
|
29
|
-
def cols
|
30
|
-
@right - @left
|
31
|
-
end
|
32
|
-
alias :width :cols
|
33
|
-
|
34
|
-
# Attempt to translate this folder and all of the descendants.
|
35
|
-
def translate(x=0, y=0)
|
36
|
-
@children.each{ |c| c.translate(x,y) }
|
37
|
-
end
|
38
|
-
|
39
|
-
# Attempt to hide all children of this layer.
|
40
|
-
def hide!
|
41
|
-
@children.each{ |c| c.hide! }
|
42
|
-
end
|
43
|
-
|
44
|
-
# Attempt to show all children of this layer.
|
45
|
-
def show!
|
46
|
-
@children.each{ |c| c.show! }
|
47
|
-
end
|
48
|
-
|
49
|
-
def passthru_blending?
|
50
|
-
blending_mode == 'passthru'
|
51
|
-
end
|
52
|
-
|
53
|
-
def empty?
|
54
|
-
@children.each do |child|
|
55
|
-
return false unless child.empty?
|
56
|
-
end
|
57
|
-
|
58
|
-
return true
|
59
|
-
end
|
60
|
-
|
61
|
-
# Export this layer and it's children to a hash recursively.
|
62
|
-
def to_hash
|
63
|
-
super.merge({
|
64
|
-
type: :group,
|
65
|
-
visible: visible?,
|
66
|
-
children: children.map(&:to_hash)
|
67
|
-
})
|
68
|
-
end
|
69
|
-
|
70
|
-
# If the method is missing, we blindly send it to the layer.
|
71
|
-
# The layer handles the case in which the method doesn't exist.
|
72
|
-
def method_missing(method, *args, &block)
|
73
|
-
@layer.send(method, *args, &block)
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
def get_dimensions
|
79
|
-
children = @children.reject(&:empty?)
|
80
|
-
@left = children.map(&:left).min || 0
|
81
|
-
@top = children.map(&:top).min || 0
|
82
|
-
@bottom = children.map(&:bottom).max || 0
|
83
|
-
@right = children.map(&:right).max || 0
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
data/lib/psd/node_layer.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
require_relative 'node'
|
2
|
-
|
3
|
-
class PSD::Node
|
4
|
-
class Layer < PSD::Node
|
5
|
-
include PSD::Node::LockToOrigin
|
6
|
-
|
7
|
-
attr_reader :layer
|
8
|
-
|
9
|
-
# Stores a reference to the PSD::Layer
|
10
|
-
def initialize(layer)
|
11
|
-
@layer = layer
|
12
|
-
layer.node = self
|
13
|
-
|
14
|
-
super([])
|
15
|
-
end
|
16
|
-
|
17
|
-
# Delegates some methods to the PSD::Layer
|
18
|
-
[:text, :ref_x, :ref_y].each do |meth|
|
19
|
-
define_method meth do
|
20
|
-
@layer.send(meth)
|
21
|
-
end
|
22
|
-
|
23
|
-
define_method "#{meth}=" do |val|
|
24
|
-
@layer.send("#{meth}=", val)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Attempt to translate the layer.
|
29
|
-
def translate(x=0, y=0)
|
30
|
-
@layer.translate x, y
|
31
|
-
end
|
32
|
-
|
33
|
-
# Attempt to scale the path components of the layer.
|
34
|
-
def scale_path_components(xr, yr)
|
35
|
-
@layer.scale_path_components(xr, yr)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Tries to hide the layer by moving it way off canvas.
|
39
|
-
def hide!
|
40
|
-
# TODO actually mess with the blend modes instead of
|
41
|
-
# just putting things way off canvas
|
42
|
-
return if @hidden_by_kelly
|
43
|
-
translate(100000, 10000)
|
44
|
-
@hidden_by_kelly = true
|
45
|
-
end
|
46
|
-
|
47
|
-
# Tries to re-show the canvas by moving it back to it's original position.
|
48
|
-
def show!
|
49
|
-
if @hidden_by_kelly
|
50
|
-
translate(-100000, -10000)
|
51
|
-
@hidden_by_kelly = false
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def empty?
|
56
|
-
width == 0 || height == 0
|
57
|
-
end
|
58
|
-
|
59
|
-
# Exports this layer to a Hash.
|
60
|
-
def to_hash
|
61
|
-
super.merge({
|
62
|
-
type: :layer,
|
63
|
-
text: @layer.text,
|
64
|
-
ref_x: @layer.reference_point.x,
|
65
|
-
ref_y: @layer.reference_point.y,
|
66
|
-
mask: @layer.mask.to_hash,
|
67
|
-
image: {
|
68
|
-
width: @layer.image.width,
|
69
|
-
height: @layer.image.height,
|
70
|
-
channels: @layer.channels_info
|
71
|
-
}
|
72
|
-
})
|
73
|
-
end
|
74
|
-
|
75
|
-
# If the method is missing, we blindly send it to the layer.
|
76
|
-
# The layer handles the case in which the method doesn't exist.
|
77
|
-
def method_missing(method, *args, &block)
|
78
|
-
@layer.send(method, *args, &block)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
data/lib/psd/node_root.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
require_relative 'node'
|
2
|
-
|
3
|
-
class PSD::Node
|
4
|
-
# Represents the root node of a Photoshop document
|
5
|
-
class Root < PSD::Node
|
6
|
-
include PSD::HasChildren
|
7
|
-
include PSD::Node::ParseLayers
|
8
|
-
|
9
|
-
attr_accessor :children
|
10
|
-
attr_reader :psd
|
11
|
-
|
12
|
-
# Stores a reference to the parsed PSD and builds the
|
13
|
-
# tree hierarchy.
|
14
|
-
def initialize(psd)
|
15
|
-
@psd = psd
|
16
|
-
build_hierarchy
|
17
|
-
end
|
18
|
-
|
19
|
-
# Recursively exports the hierarchy to a Hash
|
20
|
-
def to_hash
|
21
|
-
{
|
22
|
-
children: children.map(&:to_hash),
|
23
|
-
document: {
|
24
|
-
width: document_width,
|
25
|
-
height: document_height,
|
26
|
-
resources: {
|
27
|
-
layer_comps: @psd.layer_comps,
|
28
|
-
guides: @psd.guides,
|
29
|
-
slices: @psd.slices
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
# Returns the width and height of the entire PSD document.
|
36
|
-
def document_dimensions
|
37
|
-
[document_width, document_height]
|
38
|
-
end
|
39
|
-
|
40
|
-
# The width of the full PSD document as defined in the header.
|
41
|
-
def document_width
|
42
|
-
@psd.header.width.to_i
|
43
|
-
end
|
44
|
-
alias_method :width, :document_width
|
45
|
-
|
46
|
-
# The height of the full PSD document as defined in the header.
|
47
|
-
def document_height
|
48
|
-
@psd.header.height.to_i
|
49
|
-
end
|
50
|
-
alias_method :height, :document_height
|
51
|
-
|
52
|
-
# The root node has no name since it's not an actual layer or group.
|
53
|
-
def name
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
|
57
|
-
# The depth of the root node is always 0.
|
58
|
-
def depth
|
59
|
-
0
|
60
|
-
end
|
61
|
-
|
62
|
-
[:top, :right, :bottom, :left].each do |meth|
|
63
|
-
define_method(meth) { 0 }
|
64
|
-
end
|
65
|
-
|
66
|
-
def opacity; 255; end
|
67
|
-
def fill_opacity; 255; end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def build_hierarchy
|
72
|
-
@children = []
|
73
|
-
result = { layers: [] }
|
74
|
-
parseStack = []
|
75
|
-
|
76
|
-
# First we build the hierarchy
|
77
|
-
@psd.layers.each do |layer|
|
78
|
-
if layer.folder?
|
79
|
-
parseStack << result
|
80
|
-
result = { name: layer.name, layer: layer, layers: [] }
|
81
|
-
elsif layer.folder_end?
|
82
|
-
temp = result
|
83
|
-
result = parseStack.pop
|
84
|
-
result[:layers] << temp
|
85
|
-
else
|
86
|
-
result[:layers] << layer
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
parse_layers(result[:layers])
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class PSD
|
2
|
-
module HasChildren
|
3
|
-
# Returns all group/folder children of this node.
|
4
|
-
def groups
|
5
|
-
@children.select{ |c| c.is_a?(PSD::Group) }
|
6
|
-
end
|
7
|
-
|
8
|
-
# Returns all layer children of this node.
|
9
|
-
def layers
|
10
|
-
@children.select{ |c| c.is_a?(PSD::Layer) }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|