psd 3.8.0 → 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.
- checksums.yaml +5 -5
- data/lib/psd/path_record.rb +6 -1
- data/lib/psd/resource_section.rb +12 -2
- data/lib/psd/resources.rb +8 -1
- data/lib/psd/resources/base.rb +3 -0
- data/lib/psd/resources/resolution_info.rb +48 -0
- data/lib/psd/resources/saved_path.rb +19 -0
- data/lib/psd/resources/work_path.rb +22 -0
- data/lib/psd/version.rb +1 -1
- metadata +24 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1199316b606804a9a2c3812a1fcddc5e62d4171693ad201475ce833774bff52f
|
4
|
+
data.tar.gz: de991a2e3bb3c6eae0998d31baff59223510b6c07b0baebd41cea6e485656cab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3299a64c6b5b21dd38d844bea52ae6d42c1ddd864e8b9a9e0bdccc6690d0340beae15852c3c682d74ef1fe658813aff233c350b3daf2e9dad97cca8d228cc4e1
|
7
|
+
data.tar.gz: ad77e3095d489ad3799a61d95b35e37a72e48adb6fd76b89b0160cb425e4b87c23132b4a3c998c3179d1ad0c9a5910a8c88d4f7a16d6ffbe140a5d2c8d69dca4
|
data/lib/psd/path_record.rb
CHANGED
@@ -19,6 +19,7 @@ class PSD
|
|
19
19
|
case @record_type
|
20
20
|
when 0, 3 then read_path_record
|
21
21
|
when 1, 2, 4, 5 then read_bezier_point
|
22
|
+
when 6 then read_path_fill_rule_record
|
22
23
|
when 7 then read_clipboard_record
|
23
24
|
when 8 then read_initial_fill
|
24
25
|
else @file.seek(24, IO::SEEK_CUR)
|
@@ -93,6 +94,10 @@ class PSD
|
|
93
94
|
@leaving_horiz = @file.read_path_number
|
94
95
|
end
|
95
96
|
|
97
|
+
def read_path_fill_rule_record
|
98
|
+
@file.seek(24, IO::SEEK_CUR)
|
99
|
+
end
|
100
|
+
|
96
101
|
def read_clipboard_record
|
97
102
|
@clipboard_top = @file.read_path_number
|
98
103
|
@clipboard_left = @file.read_path_number
|
@@ -107,4 +112,4 @@ class PSD
|
|
107
112
|
@file.seek(22, IO::SEEK_CUR)
|
108
113
|
end
|
109
114
|
end
|
110
|
-
end
|
115
|
+
end
|
data/lib/psd/resource_section.rb
CHANGED
@@ -2,9 +2,15 @@ class PSD
|
|
2
2
|
class Resource
|
3
3
|
module Section
|
4
4
|
def self.factory(file, resource)
|
5
|
+
if path_resource?(resource)
|
6
|
+
section = Section::SavedPath.new(file, resource)
|
7
|
+
section.parse
|
8
|
+
return section.name
|
9
|
+
end
|
10
|
+
|
5
11
|
Section.constants.each do |c|
|
6
12
|
next if c == :Base
|
7
|
-
|
13
|
+
|
8
14
|
section = Section.const_get(c)
|
9
15
|
next unless section.resource_id == resource.id
|
10
16
|
|
@@ -14,6 +20,10 @@ class PSD
|
|
14
20
|
|
15
21
|
return nil
|
16
22
|
end
|
23
|
+
|
24
|
+
def self.path_resource?(resource)
|
25
|
+
resource.id >= 2000 && resource.id <= 2997
|
26
|
+
end
|
17
27
|
end
|
18
28
|
end
|
19
|
-
end
|
29
|
+
end
|
data/lib/psd/resources.rb
CHANGED
@@ -7,7 +7,7 @@ class PSD
|
|
7
7
|
class Resources
|
8
8
|
attr_reader :resources
|
9
9
|
alias :data :resources
|
10
|
-
|
10
|
+
|
11
11
|
def initialize(file)
|
12
12
|
@file = file
|
13
13
|
@resources = {}
|
@@ -47,6 +47,13 @@ class PSD
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
# Paths exist between resource ID 2000 and 2997
|
51
|
+
def saved_paths
|
52
|
+
@resources.
|
53
|
+
select { |id, r| id >= 2000 && id <= 2997 }.
|
54
|
+
map { |id, r| r }
|
55
|
+
end
|
56
|
+
|
50
57
|
def by_type(id)
|
51
58
|
@resources[@type_index[id]]
|
52
59
|
end
|
data/lib/psd/resources/base.rb
CHANGED
@@ -26,5 +26,8 @@ end
|
|
26
26
|
|
27
27
|
require 'psd/resources/guides'
|
28
28
|
require 'psd/resources/layer_comps'
|
29
|
+
require 'psd/resources/resolution_info'
|
30
|
+
require 'psd/resources/saved_path'
|
29
31
|
require 'psd/resources/slices'
|
32
|
+
require 'psd/resources/work_path'
|
30
33
|
require 'psd/resources/xmp_metadata'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
3
|
+
class PSD
|
4
|
+
class Resource
|
5
|
+
module Section
|
6
|
+
class ResolutionInfo < Base
|
7
|
+
RES_UNIT_NAMES = %w(pixel/inch pixel/cm).freeze
|
8
|
+
UNIT_NAMES = %w(in cm pt picas columns).freeze
|
9
|
+
|
10
|
+
resource_id 1005
|
11
|
+
name :resolution_info
|
12
|
+
|
13
|
+
attr_reader :h_res, :h_res_unit, :width_unit
|
14
|
+
attr_reader :v_res, :v_res_unit, :height_unit
|
15
|
+
|
16
|
+
def parse
|
17
|
+
# 32-bit fixed-point number (16.16)
|
18
|
+
@h_res = @file.read_uint.to_f / (1 << 16)
|
19
|
+
@h_res_unit = @file.read_ushort
|
20
|
+
@width_unit = @file.read_ushort
|
21
|
+
|
22
|
+
# 32-bit fixed-point number (16.16)
|
23
|
+
@v_res = @file.read_uint.to_f / (1 << 16)
|
24
|
+
@v_res_unit = @file.read_ushort
|
25
|
+
@height_unit = @file.read_ushort
|
26
|
+
|
27
|
+
@resource.data = self
|
28
|
+
end
|
29
|
+
|
30
|
+
def h_res_unit_name
|
31
|
+
RES_UNIT_NAMES.fetch(h_res_unit - 1, 'unknown')
|
32
|
+
end
|
33
|
+
|
34
|
+
def v_res_unit_name
|
35
|
+
RES_UNIT_NAMES.fetch(v_res_unit - 1, 'unknown')
|
36
|
+
end
|
37
|
+
|
38
|
+
def width_unit_name
|
39
|
+
UNIT_NAMES.fetch(width_unit - 1, 'unknown')
|
40
|
+
end
|
41
|
+
|
42
|
+
def height_unit_name
|
43
|
+
UNIT_NAMES.fetch(height_unit - 1, 'unknown')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
3
|
+
class PSD
|
4
|
+
class Resource
|
5
|
+
module Section
|
6
|
+
class SavedPath < Base
|
7
|
+
def parse
|
8
|
+
paths = []
|
9
|
+
record_count = @resource.size / 26
|
10
|
+
record_count.times do
|
11
|
+
paths << PathRecord.new(@file)
|
12
|
+
end
|
13
|
+
|
14
|
+
@resource.data = paths
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
3
|
+
class PSD
|
4
|
+
class Resource
|
5
|
+
module Section
|
6
|
+
class WorkPath < Base
|
7
|
+
resource_id 1025
|
8
|
+
name :work_path
|
9
|
+
|
10
|
+
def parse
|
11
|
+
paths = []
|
12
|
+
record_count = @resource.size / 26
|
13
|
+
record_count.times do
|
14
|
+
paths << PathRecord.new(@file)
|
15
|
+
end
|
16
|
+
|
17
|
+
@resource.data = paths
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
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.9.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:
|
12
|
+
date: 2018-01-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -249,7 +249,10 @@ files:
|
|
249
249
|
- lib/psd/resources/base.rb
|
250
250
|
- lib/psd/resources/guides.rb
|
251
251
|
- lib/psd/resources/layer_comps.rb
|
252
|
+
- lib/psd/resources/resolution_info.rb
|
253
|
+
- lib/psd/resources/saved_path.rb
|
252
254
|
- lib/psd/resources/slices.rb
|
255
|
+
- lib/psd/resources/work_path.rb
|
253
256
|
- lib/psd/resources/xmp_metadata.rb
|
254
257
|
- lib/psd/slice.rb
|
255
258
|
- lib/psd/slices.rb
|
@@ -301,33 +304,33 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
304
|
version: '0'
|
302
305
|
requirements: []
|
303
306
|
rubyforge_project:
|
304
|
-
rubygems_version: 2.
|
307
|
+
rubygems_version: 2.7.0
|
305
308
|
signing_key:
|
306
309
|
specification_version: 4
|
307
310
|
summary: General purpose library for parsing Photoshop files
|
308
311
|
test_files:
|
309
|
-
- spec/
|
310
|
-
- spec/
|
311
|
-
- spec/
|
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
|
312
322
|
- spec/files/empty-layer.psd
|
313
|
-
- spec/files/example.psb
|
314
|
-
- spec/files/example.psd
|
315
|
-
- spec/files/guides.psd
|
316
|
-
- spec/files/locked.psd
|
317
|
-
- spec/files/one_layer.psd
|
318
323
|
- spec/files/path.psd
|
319
324
|
- spec/files/pixel.psd
|
325
|
+
- spec/files/one_layer.psd
|
326
|
+
- spec/files/alignment_modes.psd
|
327
|
+
- spec/files/locked.psd
|
320
328
|
- spec/files/simplest.psd
|
321
|
-
- spec/files/
|
329
|
+
- spec/files/blendmodes.psd
|
330
|
+
- spec/files/example.psd
|
322
331
|
- spec/files/text.psd
|
323
|
-
- spec/
|
332
|
+
- spec/files/example.psb
|
333
|
+
- spec/files/empty-layer-subgroups.psd
|
334
|
+
- spec/files/guides.psd
|
324
335
|
- spec/hierarchy_spec.rb
|
325
|
-
- spec/image_spec.rb
|
326
|
-
- spec/lazy_execute_spec.rb
|
327
|
-
- spec/locked_spec.rb
|
328
|
-
- spec/parsing_spec.rb
|
329
|
-
- spec/psb_parsing_spec.rb
|
330
336
|
- spec/psd_spec.rb
|
331
|
-
- spec/slices_spec.rb
|
332
|
-
- spec/spec_helper.rb
|
333
|
-
- spec/text_spec.rb
|