psd 2.1.2 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
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