psd 3.6.0 → 3.7.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 +4 -4
- data/lib/psd/layer/info.rb +2 -0
- data/lib/psd/layer/info/effects_layer.rb +174 -0
- data/lib/psd/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0df3c9415bc9d3724a1b47edfdd05e556486ab6
|
4
|
+
data.tar.gz: e7eaecbf86a2d7e117214dfbe024341fb70df9e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 985a277130a940ccbd75f6028332a265c0a526b1db2906a8fb2d2a97a94ec13c7f399d07a610655888849fd4ab0439279bace6c53fb96767c660a2f01cdb2a1b
|
7
|
+
data.tar.gz: d8a068fe24e27e95e03c3c4f14dc8034dd0beb7c4127908287acef89d83ab667e201890374b546981fea87be06802a76bdaf10b9898274ab4fbcb26ecb7534f4
|
data/lib/psd/layer/info.rb
CHANGED
@@ -8,6 +8,7 @@ require 'psd/layer/info/color_balance'
|
|
8
8
|
require 'psd/layer/info/color_lookup'
|
9
9
|
require 'psd/layer/info/content_generator'
|
10
10
|
require 'psd/layer/info/curves'
|
11
|
+
require 'psd/layer/info/effects_layer'
|
11
12
|
require 'psd/layer/info/exposure'
|
12
13
|
require 'psd/layer/info/fill_opacity'
|
13
14
|
require 'psd/layer/info/gradient_fill'
|
@@ -60,6 +61,7 @@ class PSD
|
|
60
61
|
color_lookup: ColorLookup,
|
61
62
|
content_generator: ContentGenerator,
|
62
63
|
curves: Curves,
|
64
|
+
effects_layer: EffectsLayer,
|
63
65
|
exposure: Exposure,
|
64
66
|
fill_opacity: FillOpacity,
|
65
67
|
gradient_fill: GradientFill,
|
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'psd/layer_info'
|
2
|
+
|
3
|
+
class PSD
|
4
|
+
# The file specification is majorly fucked for this info block. Had to make
|
5
|
+
# lots of tweaks.
|
6
|
+
class EffectsLayer < LayerInfo
|
7
|
+
def self.should_parse?(key)
|
8
|
+
key == 'lrFX'
|
9
|
+
end
|
10
|
+
|
11
|
+
BEVEL_STYLES = [
|
12
|
+
'Outer Bevel',
|
13
|
+
'Inner Bevel',
|
14
|
+
'Emboss',
|
15
|
+
'Pillow Emboss',
|
16
|
+
'Stroke Emboss'
|
17
|
+
].freeze
|
18
|
+
|
19
|
+
def parse
|
20
|
+
version = @file.read_short
|
21
|
+
effects_count = @file.read_short
|
22
|
+
|
23
|
+
@data = {}
|
24
|
+
effects_count.times do
|
25
|
+
sig = @file.read_string(4)
|
26
|
+
if sig != "8BIM"
|
27
|
+
PSD.logger.debug "Effect layer signature was not 8BIM, got #{sig}. Skipping."
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
|
31
|
+
key = @file.read_string(4)
|
32
|
+
case key
|
33
|
+
when 'cmnS' then common_state
|
34
|
+
when 'dsdw' then shadow(:drop_shadow)
|
35
|
+
when 'isdw' then shadow(:inner_shadow)
|
36
|
+
when 'oglw' then outer_glow
|
37
|
+
when 'iglw' then inner_glow
|
38
|
+
when 'bevl' then bevel
|
39
|
+
when 'sofi' then solid_fill
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# This is the most pointless block of data yet.
|
47
|
+
def common_state
|
48
|
+
@file.seek 11, IO::SEEK_CUR
|
49
|
+
@data[:visible] = true
|
50
|
+
end
|
51
|
+
|
52
|
+
def shadow(key)
|
53
|
+
@data[key] = {}
|
54
|
+
size = @file.read_int
|
55
|
+
|
56
|
+
@data[key][:version] = @file.read_int
|
57
|
+
@data[key][:size] = @file.read_short
|
58
|
+
@data[key][:spread] = @file.read_int
|
59
|
+
@data[key][:angle] = @file.read_int
|
60
|
+
@data[key][:distance] = @file.read_int
|
61
|
+
|
62
|
+
# Not sure if Photoshop or the spec is wrong, but somebody done goofed.
|
63
|
+
@file.seek 2, IO::SEEK_CUR
|
64
|
+
|
65
|
+
@data[key][:color] = @file.read_space_color
|
66
|
+
|
67
|
+
@file.seek 4, IO::SEEK_CUR # blend mode sig
|
68
|
+
@data[key][:blend_mode] = @file.read_string(4)
|
69
|
+
@data[key][:enabled] = @file.read_boolean
|
70
|
+
@data[key][:use_global_light] = @file.read_boolean
|
71
|
+
@data[key][:opacity] = (255.0 / @file.read_byte).round
|
72
|
+
|
73
|
+
if size == 51
|
74
|
+
@data[key][:native_color] = @file.read_space_color
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def outer_glow
|
79
|
+
@data[:outer_glow] = {}
|
80
|
+
size = @file.read_int
|
81
|
+
|
82
|
+
@data[:outer_glow][:version] = @file.read_int
|
83
|
+
@data[:outer_glow][:size] = @file.read_short
|
84
|
+
@data[:outer_glow][:spread] = @file.read_int
|
85
|
+
@file.seek 2, IO::SEEK_CUR
|
86
|
+
|
87
|
+
@data[:outer_glow][:color] = @file.read_space_color
|
88
|
+
|
89
|
+
@file.seek 4, IO::SEEK_CUR # blend sig
|
90
|
+
@data[:outer_glow][:blend_mode] = @file.read_string(4)
|
91
|
+
@data[:outer_glow][:enabled] = @file.read_boolean
|
92
|
+
@data[:outer_glow][:opacity] = (255.0 / @file.read_byte).round
|
93
|
+
|
94
|
+
if size ==42
|
95
|
+
@data[:outer_glow][:native_color] = @file.read_space_color
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def inner_glow
|
100
|
+
@data[:inner_glow] = {}
|
101
|
+
size = @file.read_int
|
102
|
+
|
103
|
+
@data[:inner_glow][:version] = @file.read_int
|
104
|
+
@data[:inner_glow][:size] = @file.read_short
|
105
|
+
@data[:inner_glow][:spread] = @file.read_int
|
106
|
+
@file.seek 2, IO::SEEK_CUR
|
107
|
+
|
108
|
+
@data[:inner_glow][:color] = @file.read_space_color
|
109
|
+
|
110
|
+
@file.seek 4, IO::SEEK_CUR # blend sig
|
111
|
+
@data[:inner_glow][:blend_mode] = @file.read_string(4)
|
112
|
+
@data[:inner_glow][:enabled] = @file.read_boolean
|
113
|
+
@data[:inner_glow][:opacity] = (255.0 / @file.read_byte).round
|
114
|
+
|
115
|
+
if @data[:inner_glow][:version] == 2
|
116
|
+
@data[:inner_glow][:invert] = @file.read_boolean
|
117
|
+
@data[:inner_glow][:native_color] = @file.read_space_color
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def bevel
|
122
|
+
@data[:bevel] = {}
|
123
|
+
size = @file.read_int
|
124
|
+
|
125
|
+
@data[:bevel][:version] = @file.read_int
|
126
|
+
|
127
|
+
# Okay somebody really goofed, this is super weird.
|
128
|
+
@data[:bevel][:angle] = @file.read_short
|
129
|
+
@file.seek 2, IO::SEEK_CUR
|
130
|
+
@data[:bevel][:size] = @file.read_short
|
131
|
+
@file.seek 2, IO::SEEK_CUR
|
132
|
+
@data[:bevel][:soften] = @file.read_short
|
133
|
+
@file.seek 2, IO::SEEK_CUR
|
134
|
+
|
135
|
+
@file.seek 4, IO::SEEK_CUR
|
136
|
+
@data[:bevel][:highlight_blend] = @file.read_string(4)
|
137
|
+
|
138
|
+
@file.seek 4, IO::SEEK_CUR
|
139
|
+
@data[:bevel][:shadow_blend] = @file.read_string(4)
|
140
|
+
|
141
|
+
@data[:bevel][:highlight_color] = @file.read_space_color
|
142
|
+
@data[:bevel][:shadow_color] = @file.read_space_color
|
143
|
+
|
144
|
+
@data[:bevel][:style_id] = @file.read_byte
|
145
|
+
@data[:bevel][:style] = BEVEL_STYLES[@data[:bevel][:style_id]]
|
146
|
+
|
147
|
+
@data[:bevel][:highlight_opacity] = @file.read_byte
|
148
|
+
@data[:bevel][:shadow_opacity] = @file.read_byte
|
149
|
+
@data[:bevel][:enabled] = @file.read_boolean
|
150
|
+
@data[:bevel][:use_global_light] = @file.read_boolean
|
151
|
+
@data[:bevel][:direction] = @file.read_byte == 0 ? 'Up' : 'Down'
|
152
|
+
|
153
|
+
if @data[:bevel][:version] == 2
|
154
|
+
@data[:bevel][:real_highlight_color] = @file.read_space_color
|
155
|
+
@data[:bevel][:real_shadow_color] = @file.read_space_color
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def solid_fill
|
160
|
+
@data[:solid_fill] = {}
|
161
|
+
@file.seek 4, IO::SEEK_CUR
|
162
|
+
|
163
|
+
@data[:solid_fill][:version] = @file.read_int
|
164
|
+
|
165
|
+
@file.seek 4, IO::SEEK_CUR
|
166
|
+
@data[:solid_fill][:blend_mode] = @file.read_string(4)
|
167
|
+
|
168
|
+
@data[:solid_fill][:color] = @file.read_space_color
|
169
|
+
@data[:solid_fill][:opacity] = (255.0 / @file.read_byte).round
|
170
|
+
@data[:solid_fill][:enabled] = @file.read_boolean
|
171
|
+
@data[:solid_fill][:native_color] = @file.read_space_color
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
data/lib/psd/version.rb
CHANGED
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: 3.
|
4
|
+
version: 3.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan LeFevre
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-01-
|
12
|
+
date: 2016-01-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/psd/layer/info/color_lookup.rb
|
175
175
|
- lib/psd/layer/info/content_generator.rb
|
176
176
|
- lib/psd/layer/info/curves.rb
|
177
|
+
- lib/psd/layer/info/effects_layer.rb
|
177
178
|
- lib/psd/layer/info/exposure.rb
|
178
179
|
- lib/psd/layer/info/fill_opacity.rb
|
179
180
|
- lib/psd/layer/info/gradient_fill.rb
|
@@ -299,7 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
299
300
|
version: '0'
|
300
301
|
requirements: []
|
301
302
|
rubyforge_project:
|
302
|
-
rubygems_version: 2.
|
303
|
+
rubygems_version: 2.4.6
|
303
304
|
signing_key:
|
304
305
|
specification_version: 4
|
305
306
|
summary: General purpose library for parsing Photoshop files
|