psd 2.1.2 → 3.1.2

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/psd.rb +8 -6
  4. data/lib/psd/blend_mode.rb +46 -38
  5. data/lib/psd/channel_image.rb +9 -5
  6. data/lib/psd/descriptor.rb +39 -16
  7. data/lib/psd/header.rb +33 -32
  8. data/lib/psd/image_formats/rle.rb +4 -10
  9. data/lib/psd/image_modes/rgb.rb +4 -4
  10. data/lib/psd/layer.rb +1 -15
  11. data/lib/psd/layer/blend_modes.rb +12 -12
  12. data/lib/psd/layer/helpers.rb +8 -10
  13. data/lib/psd/layer/info.rb +9 -7
  14. data/lib/psd/layer/position_and_channels.rb +0 -4
  15. data/lib/psd/layer_info.rb +0 -4
  16. data/lib/psd/layer_info/blend_clipping_elements.rb +4 -2
  17. data/lib/psd/layer_info/blend_interior_elements.rb +4 -2
  18. data/lib/psd/layer_info/fill_opacity.rb +4 -2
  19. data/lib/psd/layer_info/layer_group.rb +4 -2
  20. data/lib/psd/layer_info/layer_id.rb +4 -2
  21. data/lib/psd/layer_info/layer_name_source.rb +4 -2
  22. data/lib/psd/layer_info/layer_section_divider.rb +4 -2
  23. data/lib/psd/layer_info/legacy_typetool.rb +5 -3
  24. data/lib/psd/layer_info/locked.rb +4 -2
  25. data/lib/psd/layer_info/metadata_setting.rb +4 -2
  26. data/lib/psd/layer_info/object_effects.rb +4 -2
  27. data/lib/psd/layer_info/pattern.rb +14 -0
  28. data/lib/psd/layer_info/placed_layer.rb +4 -2
  29. data/lib/psd/layer_info/reference_point.rb +4 -2
  30. data/lib/psd/layer_info/sheet_color.rb +18 -0
  31. data/lib/psd/layer_info/solid_color.rb +36 -0
  32. data/lib/psd/layer_info/typetool.rb +4 -2
  33. data/lib/psd/layer_info/unicode_name.rb +4 -2
  34. data/lib/psd/layer_info/vector_mask.rb +4 -2
  35. data/lib/psd/layer_info/vector_origination.rb +14 -0
  36. data/lib/psd/layer_info/vector_stroke.rb +4 -2
  37. data/lib/psd/layer_info/vector_stroke_content.rb +4 -2
  38. data/lib/psd/layer_mask.rb +2 -8
  39. data/lib/psd/lazy_execute.rb +5 -1
  40. data/lib/psd/node.rb +112 -48
  41. data/lib/psd/nodes/ancestry.rb +80 -75
  42. data/lib/psd/nodes/build_preview.rb +4 -4
  43. data/lib/psd/nodes/group.rb +35 -0
  44. data/lib/psd/nodes/layer.rb +40 -0
  45. data/lib/psd/nodes/root.rb +90 -0
  46. data/lib/psd/nodes/search.rb +19 -19
  47. data/lib/psd/path_record.rb +1 -71
  48. data/lib/psd/renderer.rb +6 -5
  49. data/lib/psd/renderer/blender.rb +10 -5
  50. data/lib/psd/renderer/cairo_helpers.rb +46 -0
  51. data/lib/psd/renderer/canvas.rb +39 -19
  52. data/lib/psd/renderer/canvas_management.rb +2 -2
  53. data/lib/psd/renderer/clipping_mask.rb +5 -4
  54. data/lib/psd/renderer/compose.rb +61 -68
  55. data/lib/psd/renderer/layer_styles.rb +15 -5
  56. data/lib/psd/renderer/layer_styles/color_overlay.rb +46 -27
  57. data/lib/psd/renderer/mask.rb +26 -22
  58. data/lib/psd/renderer/mask_canvas.rb +12 -0
  59. data/lib/psd/renderer/vector_shape.rb +239 -0
  60. data/lib/psd/resource_section.rb +4 -7
  61. data/lib/psd/resources.rb +4 -19
  62. data/lib/psd/resources/base.rb +27 -0
  63. data/lib/psd/resources/guides.rb +6 -4
  64. data/lib/psd/resources/layer_comps.rb +6 -4
  65. data/lib/psd/resources/slices.rb +7 -5
  66. data/lib/psd/version.rb +1 -1
  67. data/psd.gemspec +1 -2
  68. data/spec/files/blendmodes.psd +0 -0
  69. data/spec/hierarchy_spec.rb +5 -0
  70. metadata +27 -26
  71. data/lib/psd/layer_info/vector_mask_2.rb +0 -10
  72. data/lib/psd/node_exporting.rb +0 -20
  73. data/lib/psd/node_group.rb +0 -86
  74. data/lib/psd/node_layer.rb +0 -81
  75. data/lib/psd/node_root.rb +0 -93
  76. data/lib/psd/nodes/has_children.rb +0 -13
  77. data/lib/psd/nodes/lock_to_origin.rb +0 -7
  78. data/lib/psd/nodes/parse_layers.rb +0 -18
  79. data/lib/psd/renderer/layer_styles/drop_shadow.rb +0 -75
  80. data/lib/psd/section.rb +0 -26
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
@@ -1,18 +0,0 @@
1
- class PSD::Node
2
- module ParseLayers
3
- # Organizes the flat layer structure into tree nodes.
4
- def parse_layers(layers)
5
- @children = []
6
- layers.each do |layer|
7
- if layer.is_a?(Hash)
8
- node = PSD::Node::Group.new(layer)
9
- elsif layer.is_a?(PSD::Layer)
10
- node = PSD::Node::Layer.new(layer)
11
- end
12
-
13
- node.parent = self
14
- @children << node
15
- end
16
- end
17
- end
18
- end
@@ -1,75 +0,0 @@
1
- class PSD
2
- class LayerStyles
3
- # Not ready yet.
4
- class DropShadow
5
- def self.should_apply?(data)
6
- #data.has_key?('DrSh')
7
- false
8
- end
9
-
10
- def initialize(styles)
11
- end
12
-
13
- def apply!
14
- end
15
-
16
- private
17
-
18
- def apply_drop_shadow
19
-
20
- end
21
-
22
- def drop_shadow
23
- data['DrSh']
24
- end
25
-
26
- def drop_shadow_blend_mode
27
- drop_shadow['Md ']
28
- end
29
-
30
- def drop_shadow_opacity
31
- drop_shadow['Opct'][:value]
32
- end
33
-
34
- def drop_shadow_light_angle
35
- drop_shadow['lagl'][:value]
36
- end
37
-
38
- def drop_shadow_use_global_light?
39
- drop_shadow['uglg']
40
- end
41
-
42
- def drop_shadow_distance
43
- drop_shadow['Dstn'][:value]
44
- end
45
-
46
- def drop_shadow_spread
47
- drop_shadow['Ckmt'][:value]
48
- end
49
-
50
- def drop_shadow_size
51
- drop_shadow['blur'][:value]
52
- end
53
-
54
- def drop_shadow_noise
55
- drop_shadow['Nose'][:value]
56
- end
57
-
58
- def drop_shadow_antialiased?
59
- drop_shadow['AntA']
60
- end
61
-
62
- def drop_shadow_contour
63
- drop_shadow['TrnS']['Nm ']
64
- end
65
-
66
- def drop_shadow_contour_curve
67
- drop_shadow['TrnS']['Crv ']
68
- end
69
-
70
- def drop_shadow_knock_out?
71
- drop_shadow['layerConceals']
72
- end
73
- end
74
- end
75
- end
data/lib/psd/section.rb DELETED
@@ -1,26 +0,0 @@
1
- class PSD
2
- # Helper that lets us track the beginning and ending locations
3
- # of each section. This is for debug and error catching purposes,
4
- # primarily.
5
- module Section
6
- attr_reader :section_start, :section_end
7
-
8
- def start_section(section=:all)
9
- @section_start = {} unless @section_start
10
- @section_start[section] = @file.tell
11
- end
12
-
13
- def end_section(section=:all)
14
- @section_end = {} unless @section_end
15
- @section_end[section] = @file.tell
16
- end
17
-
18
- def start_of_section(section=:all)
19
- @section_start[section]
20
- end
21
-
22
- def end_of_section(section=:all)
23
- @section_end[section]
24
- end
25
- end
26
- end