psd 0.4.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd304c938fae5c2e76f30356d35bbb6a53151c5f
4
- data.tar.gz: 1b109cfefe59ac367216f1cd541180789714531f
3
+ metadata.gz: db9f14cd10de0296d8511ad83cf909f20519d3ca
4
+ data.tar.gz: 0246042fd4037c9466a0cde4f215ebe411d529e4
5
5
  SHA512:
6
- metadata.gz: 418c704ed6dd5b33a0b96e0de0d9b8cd327ea93a09a75a4b9c916b74b2e129fa0e6e16e352e8da3bda19ef07bc4ee70f4342f4889e9601983f74eaec8d5a361a
7
- data.tar.gz: 63037689cfc8f00a0afd27883d0979b9cf34144bf38d3faab48dc28a53d60f991783f9245d10bba1ec200c8111afb4f5ad41d0ae36265daf3f155508f7fe63bd
6
+ metadata.gz: e05a52e512a93122255bda14fb3cbb329b75dd5e7be620eed20e7bccf9f109e1ea969b5430383e7910313a22afa6e4e2842631182fd11d4925d998f2a52bfa44
7
+ data.tar.gz: 82ebbb3fcee334bc73f039dde683c635724cf674f6b392f9523dd30cbf43d17ec54d04f4c2eeb360b93c7f09f781812abb5db30363efc35e6cf2bdcb2245e879
data/README.md CHANGED
@@ -32,6 +32,8 @@ Or install it yourself as:
32
32
 
33
33
  ## Usage
34
34
 
35
+ The [full source code documentation](http://rubydoc.info/gems/psd/frames) is available, but here are some common ways to use and access the PSD data:
36
+
35
37
  **Loading a PSD**
36
38
 
37
39
  ``` ruby
@@ -1,4 +1,4 @@
1
- require 'chunky_png'
1
+ require 'oily_png'
2
2
 
3
3
  class PSD::Image
4
4
  module Export
@@ -8,7 +8,7 @@ class PSD::Image
8
8
  # data.
9
9
  def to_png
10
10
  PSD.logger.debug "Beginning PNG export"
11
- png = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
11
+ png = ChunkyPNG::Image.new(width.to_i, height.to_i, ChunkyPNG::Color::TRANSPARENT)
12
12
 
13
13
  i = 0
14
14
  height.times do |y|
data/lib/psd/layer.rb CHANGED
@@ -287,8 +287,10 @@ class PSD
287
287
  # not UTF-8. Luckily Ruby kicks ass at character conversion.
288
288
  def parse_legacy_layer_name
289
289
  @legacy_name_start = @file.tell
290
- len = Util.pad4 @file.read(1).unpack('C')[0]
291
- @legacy_name = @file.read(len).encode('UTF-8', 'MacRoman').delete("\000")
290
+
291
+ len = Util.pad4 @file.read(1).bytes.to_a[0]
292
+ @legacy_name = @file.read_string(len)
293
+
292
294
  @legacy_name_end = @file.tell
293
295
  end
294
296
 
@@ -302,7 +304,7 @@ class PSD
302
304
  @file.seek 4, IO::SEEK_CUR
303
305
 
304
306
  # Key, very important
305
- key = @file.read(4).unpack('A4')[0]
307
+ key = @file.read_string(4)
306
308
  @info_keys << key
307
309
 
308
310
  length = Util.pad2 @file.read_int
@@ -329,14 +331,13 @@ class PSD
329
331
  end
330
332
 
331
333
  if !info_parsed
332
- PSD.logger.debug "SKIPPING: key = #{key}, length = #{length}"
334
+ PSD.logger.debug "Skipping: key = #{key}, pos = #{@file.tell}, length = #{length}"
333
335
  @file.seek pos + length
334
336
  end
335
337
 
336
338
  @file.seek pos + length if @file.tell != (pos + length)
337
339
  end
338
340
 
339
- # puts "Layer = #{name}, Parsed = #{@info_keys - PSD.keys.uniq}, Unparsed = #{PSD.keys.uniq - @info_keys}"
340
341
  @extra_data_end = @file.tell
341
342
  end
342
343
 
@@ -71,30 +71,46 @@ class PSD
71
71
 
72
72
  # Return all font sizes for this layer.
73
73
  def sizes
74
- return [] if engine_data.nil?
75
- engine_data.EngineDict.StyleRun.RunArray.map do |r|
76
- r.StyleSheet.StyleSheetData.FontSize
77
- end.uniq
74
+ return [] if engine_data.nil? || !styles.has_key?('FontSize')
75
+ styles['FontSize'].uniq
78
76
  end
79
77
 
80
- # Return all colors used for text in this layer. The colors are returned in RGB
78
+ # Return all colors used for text in this layer. The colors are returned in RGBA
81
79
  # format as an array of arrays.
82
80
  #
83
- # => [[255, 0, 0], [0, 0, 255]]
81
+ # => [[255, 0, 0, 255], [0, 0, 255, 255]]
84
82
  def colors
85
- return [] if engine_data.nil?
86
- engine_data.EngineDict.StyleRun.RunArray.map do |r|
87
- next unless r.StyleSheet.StyleSheetData.key?('FillColor')
88
- r.StyleSheet.StyleSheetData.FillColor.Values.map do |v|
89
- (v * 255).round
90
- end
91
- end.uniq
83
+ return [] if engine_data.nil? || !styles.has_key?('FillColor')
84
+ styles['FillColor'].map { |s|
85
+ values = s['Values'].map { |v| (v * 255).round }
86
+ values << values.shift # Change ARGB -> RGBA for consistency
87
+ }.uniq
92
88
  end
93
89
 
94
90
  def engine_data
95
91
  @data[:engine_data]
96
92
  end
97
93
 
94
+ def styles
95
+ return {} if engine_data.nil?
96
+
97
+ @styles ||= (
98
+ data = engine_data.EngineDict.StyleRun.RunArray.map do |r|
99
+ r.StyleSheet.StyleSheetData
100
+ end
101
+
102
+ Hash[data.reduce({}) { |m, o|
103
+ o.each do |k, v|
104
+ (m[k] ||= []) << v
105
+ end
106
+
107
+ m
108
+ }.map { |k, v|
109
+ [k, v.uniq]
110
+ }]
111
+ )
112
+ end
113
+
98
114
  def parser
99
115
  @parser ||= PSD::EngineData.new(@data[:text]['EngineData'])
100
116
  end
@@ -107,7 +107,7 @@ class PSD
107
107
 
108
108
  def parse_global_mask
109
109
  length = @file.read_int
110
- return if length == 0
110
+ return if length <= 0
111
111
 
112
112
  mask_end = @file.tell + length
113
113
  PSD.logger.debug "Global Mask: length = #{length}"
@@ -8,7 +8,17 @@ class PSD
8
8
  def parse
9
9
  # Descriptor version
10
10
  @file.seek 4, IO::SEEK_CUR
11
- @resource.data = Descriptor.new(@file).parse
11
+
12
+ @data = Descriptor.new(@file).parse
13
+ @resource.data = self
14
+ end
15
+
16
+ def names
17
+ @data['list'].map { |c| c['Nm '] }
18
+ end
19
+
20
+ def [](val)
21
+ @data[val]
12
22
  end
13
23
  end
14
24
  end
data/lib/psd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class PSD
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
data/psd.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.require_paths = ["lib"]
20
20
 
21
21
  gem.add_dependency "bindata"
22
- gem.add_dependency "chunky_png"
22
+ gem.add_dependency "oily_png"
23
23
  gem.add_dependency 'psd-enginedata'
24
24
 
25
25
  gem.test_files = Dir.glob("spec/**/*")
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: 0.4.1
4
+ version: 0.4.2
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: 2013-08-05 00:00:00.000000000 Z
12
+ date: 2013-08-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bindata
@@ -26,7 +26,7 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: chunky_png
29
+ name: oily_png
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '>='