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.
Files changed (130) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +2 -0
  3. data/README.md +60 -20
  4. data/lib/psd/blend_mode.rb +46 -38
  5. data/lib/psd/channel_image.rb +11 -5
  6. data/lib/psd/color.rb +14 -5
  7. data/lib/psd/descriptor.rb +39 -16
  8. data/lib/psd/file.rb +9 -6
  9. data/lib/psd/header.rb +38 -33
  10. data/lib/psd/helpers.rb +2 -2
  11. data/lib/psd/image.rb +21 -16
  12. data/lib/psd/image_formats/layer_rle.rb +2 -2
  13. data/lib/psd/image_formats/rle.rb +4 -10
  14. data/lib/psd/image_modes/cmyk.rb +18 -5
  15. data/lib/psd/image_modes/greyscale.rb +6 -1
  16. data/lib/psd/image_modes/rgb.rb +17 -5
  17. data/lib/psd/layer/blend_modes.rb +15 -13
  18. data/lib/psd/layer/helpers.rb +8 -10
  19. data/lib/psd/layer/info/black_white.rb +33 -0
  20. data/lib/psd/{layer_info → layer/info}/blend_clipping_elements.rb +4 -2
  21. data/lib/psd/{layer_info → layer/info}/blend_interior_elements.rb +4 -2
  22. data/lib/psd/layer/info/brightness_contrast.rb +21 -0
  23. data/lib/psd/layer/info/channel_blending_restrictions.rb +27 -0
  24. data/lib/psd/layer/info/channel_mixer.rb +27 -0
  25. data/lib/psd/layer/info/color_balance.rb +23 -0
  26. data/lib/psd/layer/info/color_lookup.rb +14 -0
  27. data/lib/psd/layer/info/content_generator.rb +42 -0
  28. data/lib/psd/layer/info/curves.rb +78 -0
  29. data/lib/psd/layer/info/effects_layer.rb +174 -0
  30. data/lib/psd/layer/info/exposure.rb +20 -0
  31. data/lib/psd/{layer_info → layer/info}/fill_opacity.rb +4 -2
  32. data/lib/psd/layer/info/gradient_fill.rb +14 -0
  33. data/lib/psd/layer/info/gradient_map.rb +69 -0
  34. data/lib/psd/layer/info/hue_saturation.rb +41 -0
  35. data/lib/psd/layer/info/invert.rb +17 -0
  36. data/lib/psd/layer/info/knockout.rb +22 -0
  37. data/lib/psd/layer/info/layer_effects.rb +16 -0
  38. data/lib/psd/{layer_info → layer/info}/layer_group.rb +4 -2
  39. data/lib/psd/{layer_info → layer/info}/layer_id.rb +4 -2
  40. data/lib/psd/layer/info/layer_mask_as_global_mask.rb +16 -0
  41. data/lib/psd/{layer_info → layer/info}/layer_name_source.rb +4 -2
  42. data/lib/psd/{layer_info → layer/info}/layer_section_divider.rb +4 -2
  43. data/lib/psd/{layer_info → layer/info}/legacy_typetool.rb +6 -4
  44. data/lib/psd/layer/info/levels.rb +48 -0
  45. data/lib/psd/{layer_info → layer/info}/locked.rb +4 -2
  46. data/lib/psd/{layer_info → layer/info}/metadata_setting.rb +5 -3
  47. data/lib/psd/{layer_info → layer/info}/object_effects.rb +5 -5
  48. data/lib/psd/layer/info/pattern.rb +14 -0
  49. data/lib/psd/layer/info/pattern_fill.rb +15 -0
  50. data/lib/psd/layer/info/photo_filter.rb +44 -0
  51. data/lib/psd/{layer_info → layer/info}/placed_layer.rb +4 -2
  52. data/lib/psd/layer/info/posterize.rb +16 -0
  53. data/lib/psd/{layer_info → layer/info}/reference_point.rb +4 -2
  54. data/lib/psd/layer/info/selective_color.rb +32 -0
  55. data/lib/psd/layer/info/sheet_color.rb +36 -0
  56. data/lib/psd/layer/info/solid_color.rb +36 -0
  57. data/lib/psd/layer/info/threshold.rb +16 -0
  58. data/lib/psd/layer/info/transparency_shapes_layer.rb +16 -0
  59. data/lib/psd/{layer_info → layer/info}/typetool.rb +27 -13
  60. data/lib/psd/{layer_info → layer/info}/unicode_name.rb +4 -2
  61. data/lib/psd/{layer_info → layer/info}/vector_mask.rb +7 -5
  62. data/lib/psd/layer/info/vector_mask_as_global_mask.rb +16 -0
  63. data/lib/psd/layer/info/vector_origination.rb +14 -0
  64. data/lib/psd/{layer_info → layer/info}/vector_stroke.rb +4 -2
  65. data/lib/psd/{layer_info → layer/info}/vector_stroke_content.rb +4 -2
  66. data/lib/psd/layer/info/vibrance.rb +22 -0
  67. data/lib/psd/layer/info.rb +106 -19
  68. data/lib/psd/layer/position_and_channels.rb +2 -6
  69. data/lib/psd/layer.rb +13 -16
  70. data/lib/psd/layer_info.rb +0 -4
  71. data/lib/psd/layer_mask.rb +61 -50
  72. data/lib/psd/lazy_execute.rb +5 -1
  73. data/lib/psd/mask.rb +7 -1
  74. data/lib/psd/node.rb +142 -49
  75. data/lib/psd/nodes/ancestry.rb +7 -6
  76. data/lib/psd/nodes/build_preview.rb +4 -4
  77. data/lib/psd/nodes/group.rb +36 -0
  78. data/lib/psd/nodes/layer.rb +45 -0
  79. data/lib/psd/nodes/layer_comps.rb +93 -0
  80. data/lib/psd/nodes/locking.rb +36 -0
  81. data/lib/psd/nodes/root.rb +87 -0
  82. data/lib/psd/nodes/search.rb +8 -65
  83. data/lib/psd/path_record.rb +5 -70
  84. data/lib/psd/renderer/blender.rb +10 -5
  85. data/lib/psd/renderer/cairo_helpers.rb +46 -0
  86. data/lib/psd/renderer/canvas.rb +41 -20
  87. data/lib/psd/renderer/canvas_management.rb +2 -2
  88. data/lib/psd/renderer/clipping_mask.rb +5 -4
  89. data/lib/psd/renderer/compose.rb +59 -69
  90. data/lib/psd/renderer/layer_styles/color_overlay.rb +45 -27
  91. data/lib/psd/renderer/layer_styles.rb +15 -5
  92. data/lib/psd/renderer/mask.rb +26 -22
  93. data/lib/psd/renderer/mask_canvas.rb +12 -0
  94. data/lib/psd/renderer/vector_shape.rb +239 -0
  95. data/lib/psd/renderer.rb +18 -7
  96. data/lib/psd/resource_section.rb +13 -6
  97. data/lib/psd/resources/base.rb +33 -0
  98. data/lib/psd/resources/guides.rb +6 -4
  99. data/lib/psd/resources/layer_comps.rb +6 -4
  100. data/lib/psd/resources/resolution_info.rb +48 -0
  101. data/lib/psd/resources/saved_path.rb +19 -0
  102. data/lib/psd/resources/slices.rb +7 -5
  103. data/lib/psd/resources/work_path.rb +22 -0
  104. data/lib/psd/resources/xmp_metadata.rb +46 -0
  105. data/lib/psd/resources.rb +17 -21
  106. data/lib/psd/slice.rb +44 -0
  107. data/lib/psd/slices.rb +13 -0
  108. data/lib/psd/util.rb +4 -2
  109. data/lib/psd/version.rb +1 -1
  110. data/lib/psd.rb +31 -45
  111. data/psd.gemspec +2 -3
  112. data/spec/files/alignment_modes.psd +0 -0
  113. data/spec/files/blendmodes.psd +0 -0
  114. data/spec/files/example.psb +0 -0
  115. data/spec/hierarchy_spec.rb +5 -0
  116. data/spec/locked_spec.rb +8 -8
  117. data/spec/psb_parsing_spec.rb +57 -0
  118. data/spec/text_spec.rb +13 -1
  119. metadata +115 -75
  120. data/circle.yml +0 -6
  121. data/lib/psd/layer_info/vector_mask_2.rb +0 -10
  122. data/lib/psd/node_exporting.rb +0 -20
  123. data/lib/psd/node_group.rb +0 -86
  124. data/lib/psd/node_layer.rb +0 -81
  125. data/lib/psd/node_root.rb +0 -93
  126. data/lib/psd/nodes/has_children.rb +0 -13
  127. data/lib/psd/nodes/lock_to_origin.rb +0 -7
  128. data/lib/psd/nodes/parse_layers.rb +0 -18
  129. data/lib/psd/renderer/layer_styles/drop_shadow.rb +0 -75
  130. 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: 2.1.2
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: 2014-03-07 00:00:00.000000000 Z
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: bindata
29
+ name: psd-enginedata
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
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: '0'
41
+ version: '1'
42
42
  - !ruby/object:Gem::Dependency
43
- name: psd-enginedata
43
+ name: chunky_png
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '1.0'
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: '1.0'
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: chunky_png
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/has_children.rb
204
- - lib/psd/nodes/lock_to_origin.rb
205
- - lib/psd/nodes/parse_layers.rb
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/section.rb
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.2.1
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/files/blendmodes.psd
276
- - spec/files/empty-layer-subgroups.psd
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/slices.psd
329
+ - spec/files/blendmodes.psd
330
+ - spec/files/example.psd
286
331
  - spec/files/text.psd
287
- - spec/guides_spec.rb
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
@@ -1,6 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.0.0-p195
4
- test:
5
- override:
6
- - rspec
@@ -1,10 +0,0 @@
1
- require_relative 'vector_mask'
2
-
3
- class PSD
4
- # Identical to VectorMask, except with a different key. This
5
- # exists in Photoshop >= CS6. If this key exists, then there
6
- # is also a vscg key.
7
- class VectorMask2 < VectorMask
8
- @key = 'vsms'
9
- end
10
- end
@@ -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
@@ -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
@@ -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
@@ -1,7 +0,0 @@
1
- class PSD::Node
2
- module LockToOrigin #:nodoc:
3
- def lock_to_origin
4
- translate(-left - 1, -top - 1)
5
- end
6
- end
7
- end