psd 0.4.1 → 0.4.2

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