psd 2.1.2 → 3.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/psd.rb +8 -6
- data/lib/psd/blend_mode.rb +46 -38
- data/lib/psd/channel_image.rb +9 -5
- data/lib/psd/descriptor.rb +39 -16
- data/lib/psd/header.rb +33 -32
- data/lib/psd/image_formats/rle.rb +4 -10
- data/lib/psd/image_modes/rgb.rb +4 -4
- data/lib/psd/layer.rb +1 -15
- data/lib/psd/layer/blend_modes.rb +12 -12
- data/lib/psd/layer/helpers.rb +8 -10
- data/lib/psd/layer/info.rb +9 -7
- data/lib/psd/layer/position_and_channels.rb +0 -4
- data/lib/psd/layer_info.rb +0 -4
- data/lib/psd/layer_info/blend_clipping_elements.rb +4 -2
- data/lib/psd/layer_info/blend_interior_elements.rb +4 -2
- data/lib/psd/layer_info/fill_opacity.rb +4 -2
- data/lib/psd/layer_info/layer_group.rb +4 -2
- data/lib/psd/layer_info/layer_id.rb +4 -2
- data/lib/psd/layer_info/layer_name_source.rb +4 -2
- data/lib/psd/layer_info/layer_section_divider.rb +4 -2
- data/lib/psd/layer_info/legacy_typetool.rb +5 -3
- data/lib/psd/layer_info/locked.rb +4 -2
- data/lib/psd/layer_info/metadata_setting.rb +4 -2
- data/lib/psd/layer_info/object_effects.rb +4 -2
- data/lib/psd/layer_info/pattern.rb +14 -0
- data/lib/psd/layer_info/placed_layer.rb +4 -2
- data/lib/psd/layer_info/reference_point.rb +4 -2
- data/lib/psd/layer_info/sheet_color.rb +18 -0
- data/lib/psd/layer_info/solid_color.rb +36 -0
- data/lib/psd/layer_info/typetool.rb +4 -2
- data/lib/psd/layer_info/unicode_name.rb +4 -2
- data/lib/psd/layer_info/vector_mask.rb +4 -2
- data/lib/psd/layer_info/vector_origination.rb +14 -0
- data/lib/psd/layer_info/vector_stroke.rb +4 -2
- data/lib/psd/layer_info/vector_stroke_content.rb +4 -2
- data/lib/psd/layer_mask.rb +2 -8
- data/lib/psd/lazy_execute.rb +5 -1
- data/lib/psd/node.rb +112 -48
- data/lib/psd/nodes/ancestry.rb +80 -75
- data/lib/psd/nodes/build_preview.rb +4 -4
- data/lib/psd/nodes/group.rb +35 -0
- data/lib/psd/nodes/layer.rb +40 -0
- data/lib/psd/nodes/root.rb +90 -0
- data/lib/psd/nodes/search.rb +19 -19
- data/lib/psd/path_record.rb +1 -71
- data/lib/psd/renderer.rb +6 -5
- data/lib/psd/renderer/blender.rb +10 -5
- data/lib/psd/renderer/cairo_helpers.rb +46 -0
- data/lib/psd/renderer/canvas.rb +39 -19
- data/lib/psd/renderer/canvas_management.rb +2 -2
- data/lib/psd/renderer/clipping_mask.rb +5 -4
- data/lib/psd/renderer/compose.rb +61 -68
- data/lib/psd/renderer/layer_styles.rb +15 -5
- data/lib/psd/renderer/layer_styles/color_overlay.rb +46 -27
- 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/resource_section.rb +4 -7
- data/lib/psd/resources.rb +4 -19
- data/lib/psd/resources/base.rb +27 -0
- data/lib/psd/resources/guides.rb +6 -4
- data/lib/psd/resources/layer_comps.rb +6 -4
- data/lib/psd/resources/slices.rb +7 -5
- data/lib/psd/version.rb +1 -1
- data/psd.gemspec +1 -2
- data/spec/files/blendmodes.psd +0 -0
- data/spec/hierarchy_spec.rb +5 -0
- metadata +27 -26
- 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
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,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
|