chunky_png 1.2.9 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -2,16 +2,15 @@ language: ruby
2
2
  script: bundle exec rake
3
3
  rvm:
4
4
  - 1.8.7
5
- - 1.9.2
6
5
  - 1.9.3
7
6
  - 2.0.0
7
+ - 2.1.0
8
8
  - ruby-head
9
9
  - ree
10
- - rbx-18mode
11
- - rbx-19mode
10
+ - rbx
12
11
  - jruby-18mode
13
12
  - jruby-19mode
14
13
  matrix:
15
14
  allow_failures:
16
- - rvm: rbx-19mode
15
+ - rvm: rbx
17
16
  - rvm: ruby-head
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ gemspec
4
4
  platforms :jruby do
5
5
  gem 'jruby-openssl'
6
6
  end
7
+
8
+ platform :rbx do
9
+ gem 'rubysl'
10
+ end
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = Chunky PNG
1
+ = Chunky PNG {<img src="https://travis-ci.org/wvanbergen/chunky_png.png?branch=master" alt="Build Status" />}[https://travis-ci.org/wvanbergen/chunky_png]
2
2
 
3
3
  This library can read and write PNG files. It is written in pure Ruby for
4
4
  maximum portability. Let me rephrase: it does NOT require RMagick or any other
@@ -296,6 +296,53 @@ module ChunkyPNG
296
296
  return self
297
297
  end
298
298
 
299
+ # Trims the border around the image, presumed to be the color of the first pixel.
300
+ #
301
+ # @param [Integer] border The color to attempt to trim.
302
+ # @return [ChunkyPNG::Canvas] The trimmed image.
303
+ # @see #trim!
304
+ def trim(border = pixels.first)
305
+ dup.trim!
306
+ end
307
+
308
+ # Trims the border around the image in place.
309
+ #
310
+ # @param [Integer] border The color to attempt to trim.
311
+ # @return [ChunkyPNG::Canvas] Returns itself, but with the border trimmed.
312
+ # @see #trim
313
+ def trim!(border = pixels.first)
314
+ x1 = [*0...width].index { |c| column(c).uniq != [border] }
315
+ x2 = [*0...width].rindex { |c| column(c).uniq != [border] }
316
+ y1 = [*0...height].index { |r| row(r).uniq != [border] }
317
+ y2 = [*0...height].rindex { |r| row(r).uniq != [border] }
318
+
319
+ crop! x1, y1, x2 - x1 + 1, y2 - y1 + 1
320
+ end
321
+
322
+ # Draws a border around the image.
323
+ #
324
+ # @param [Integer] size The size of the border.
325
+ # @param [Integer] color The color of the border.
326
+ # @return [ChunkyPNG::Canvas] Returns a bordered version of the image.
327
+ # @see #border!
328
+ def border(size, color = ChunkyPNG::Color::BLACK)
329
+ dup.border!(size, color)
330
+ end
331
+
332
+ # Draws a border around the image in place.
333
+ #
334
+ # @param [Integer] size The size of the border.
335
+ # @param [Integer] color The color of the border.
336
+ # @return [ChunkyPNG::Canvas] Returns itself with the border added.
337
+ # @see #border
338
+ def border!(size, color = ChunkyPNG::Color::BLACK)
339
+ new_width = width + size * 2
340
+ new_height = height + size * 2
341
+
342
+ bg = Canvas.new(new_width, new_height, color).replace(self, size, size)
343
+ replace_canvas!(new_width, new_height, bg.pixels)
344
+ end
345
+
299
346
  protected
300
347
 
301
348
  # Checks whether another image has the correct dimension to be used for an operation
@@ -56,8 +56,12 @@ module ChunkyPNG
56
56
  MAX = 0xff
57
57
 
58
58
  # @private
59
- # @return [Regexp] The regexp to parse hex color values.
60
- HEX_COLOR_REGEXP = /^(?:#|0x)?([0-9a-f]{6})([0-9a-f]{2})?$/i
59
+ # @return [Regexp] The regexp to parse 3-digit hex color values.
60
+ HEX3_COLOR_REGEXP = /\A(?:#|0x)?([0-9a-f]{3})\z/i
61
+
62
+ # @private
63
+ # @return [Regexp] The regexp to parse 6- and 8-digit hex color values.
64
+ HEX6_COLOR_REGEXP = /\A(?:#|0x)?([0-9a-f]{6})([0-9a-f]{2})?\z/i
61
65
 
62
66
  # @private
63
67
  # @return [Regexp] The regexp to parse named color values.
@@ -77,8 +81,8 @@ module ChunkyPNG
77
81
  return source if source.kind_of?(Integer)
78
82
  case source.to_s
79
83
  when /^\d+$/; source.to_s.to_i
80
- when ChunkyPNG::Color::HEX_COLOR_REGEXP; ChunkyPNG::Color.from_hex(source.to_s)
81
- when ChunkyPNG::Color::HTML_COLOR_REGEXP; ChunkyPNG::Color.html_color(source.to_s)
84
+ when HEX3_COLOR_REGEXP, HEX6_COLOR_REGEXP; from_hex(source.to_s)
85
+ when HTML_COLOR_REGEXP; html_color(source.to_s)
82
86
  else raise ArgumentError, "Don't know how to create a color from #{source.inspect}!"
83
87
  end
84
88
  end
@@ -143,7 +147,8 @@ module ChunkyPNG
143
147
 
144
148
  # Creates a color by converting it from a string in hex notation.
145
149
  #
146
- # It supports colors with (#rrggbbaa) or without (#rrggbb) alpha channel.
150
+ # It supports colors with (#rrggbbaa) or without (#rrggbb) alpha channel
151
+ # as well as the 3-digit short format (#rgb) for those without.
147
152
  # Color strings may include the prefix "0x" or "#".
148
153
  #
149
154
  # @param [String] str The color in hex notation. @return [Integer] The
@@ -153,13 +158,16 @@ module ChunkyPNG
153
158
  # @return [Integer] The color value.
154
159
  # @raise [ArgumentError] if the value given is not a hex color notation.
155
160
  def from_hex(hex_value, opacity = nil)
156
- if HEX_COLOR_REGEXP =~ hex_value
157
- base_color = $1.hex << 8
158
- opacity ||= $2 ? $2.hex : 0xff
159
- base_color | opacity
160
- else
161
- raise ArgumentError, "Not a valid hex color notation: #{hex_value.inspect}!"
162
- end
161
+ base_color = case hex_value
162
+ when HEX3_COLOR_REGEXP
163
+ $1.gsub(/([0-9a-f])/i, '\1\1').hex << 8
164
+ when HEX6_COLOR_REGEXP
165
+ $1.hex << 8
166
+ else
167
+ raise ArgumentError, "Not a valid hex color notation: #{hex_value.inspect}!"
168
+ end
169
+ opacity ||= $2 ? $2.hex : 0xff
170
+ base_color | opacity
163
171
  end
164
172
 
165
173
  ####################################################################
@@ -1,5 +1,5 @@
1
1
  module ChunkyPNG
2
2
  # The current version of ChunkyPNG.
3
3
  # Set it and commit the change this before running rake release.
4
- VERSION = "1.2.9"
4
+ VERSION = "1.3.0"
5
5
  end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ChunkyPNG::Canvas::Operations do
4
-
5
- subject { reference_canvas('operations') }
6
-
4
+
5
+ subject { reference_canvas('operations') }
6
+
7
7
  describe '#grayscale' do
8
8
  it "should not return itself" do
9
9
  subject.grayscale.should_not equal(subject)
@@ -12,12 +12,12 @@ describe ChunkyPNG::Canvas::Operations do
12
12
  it "should convert the image correctly" do
13
13
  subject.grayscale.should == reference_canvas('operations_grayscale')
14
14
  end
15
-
15
+
16
16
  it "should not adjust the current image" do
17
- lambda { subject.crop(10, 5, 4, 8) }.should_not change(subject, :pixels)
17
+ lambda { subject.grayscale }.should_not change(subject, :pixels)
18
18
  end
19
19
  end
20
-
20
+
21
21
  describe '#grayscale!' do
22
22
  it "should return itself" do
23
23
  subject.grayscale!.should equal(subject)
@@ -27,32 +27,32 @@ describe ChunkyPNG::Canvas::Operations do
27
27
  subject.grayscale!
28
28
  subject.should == reference_canvas('operations_grayscale')
29
29
  end
30
- end
31
-
30
+ end
31
+
32
32
  describe '#crop' do
33
33
  it "should crop the right pixels from the original canvas" do
34
34
  subject.crop(10, 5, 4, 8).should == reference_canvas('cropped')
35
35
  end
36
-
36
+
37
37
  it "should not return itself" do
38
38
  subject.crop(10, 5, 4, 8).should_not equal(subject)
39
39
  end
40
-
40
+
41
41
  it "should not adjust the current image" do
42
42
  lambda { subject.crop(10, 5, 4, 8) }.should_not change(subject, :pixels)
43
43
  end
44
-
44
+
45
45
  it "should raise an exception when the cropped image falls outside the oiginal image" do
46
46
  lambda { subject.crop(16, 16, 2, 2) }.should raise_error(ChunkyPNG::OutOfBounds)
47
47
  end
48
48
  end
49
-
49
+
50
50
  describe '#crop!' do
51
51
  it "should crop the right pixels from the original canvas" do
52
52
  subject.crop!(10, 5, 4, 8)
53
53
  subject.should == reference_canvas('cropped')
54
54
  end
55
-
55
+
56
56
  it "should have a new width and height" do
57
57
  lambda { subject.crop!(10, 5, 4, 8) }.should change(subject, :dimension).
58
58
  from(ChunkyPNG::Dimension('16x16')).
@@ -62,7 +62,7 @@ describe ChunkyPNG::Canvas::Operations do
62
62
  it "should raise an exception when the cropped image falls outside the oiginal image" do
63
63
  lambda { subject.crop!(16, 16, 2, 2) }.should raise_error(ChunkyPNG::OutOfBounds)
64
64
  end
65
-
65
+
66
66
  it "should return itself" do
67
67
  subject.crop!(10, 5, 4, 8).should equal(subject)
68
68
  end
@@ -73,42 +73,42 @@ describe ChunkyPNG::Canvas::Operations do
73
73
  subcanvas = ChunkyPNG::Canvas.new(4, 8, ChunkyPNG::Color.rgba(0, 0, 0, 75))
74
74
  subject.compose(subcanvas, 8, 4).should == reference_canvas('composited')
75
75
  end
76
-
76
+
77
77
  it "should leave the original intact" do
78
78
  subject.compose(ChunkyPNG::Canvas.new(1,1))
79
79
  subject.should == reference_canvas('operations')
80
80
  end
81
-
81
+
82
82
  it "should not return itself" do
83
83
  subject.compose(ChunkyPNG::Canvas.new(1,1)).should_not equal(subject)
84
- end
85
-
84
+ end
85
+
86
86
  it "should raise an exception when the pixels to compose fall outside the image" do
87
87
  lambda { subject.compose(ChunkyPNG::Canvas.new(1,1), 16, 16) }.should raise_error(ChunkyPNG::OutOfBounds)
88
88
  end
89
89
  end
90
-
90
+
91
91
  describe '#compose!' do
92
92
  it "should compose pixels correctly" do
93
93
  subcanvas = ChunkyPNG::Canvas.new(4, 8, ChunkyPNG::Color.rgba(0, 0, 0, 75))
94
94
  subject.compose!(subcanvas, 8, 4)
95
95
  subject.should == reference_canvas('composited')
96
96
  end
97
-
97
+
98
98
  it "should return itself" do
99
99
  subject.compose!(ChunkyPNG::Canvas.new(1,1)).should equal(subject)
100
100
  end
101
-
101
+
102
102
  it "should compose a base image and mask correctly" do
103
103
  base = reference_canvas('clock_base')
104
104
  mask = reference_canvas('clock_mask_updated')
105
105
  base.compose!(mask)
106
106
  base.should == reference_canvas('clock_updated')
107
107
  end
108
-
108
+
109
109
  it "should raise an exception when the pixels to compose fall outside the image" do
110
110
  lambda { subject.compose!(ChunkyPNG::Canvas.new(1,1), 16, 16) }.should raise_error(ChunkyPNG::OutOfBounds)
111
- end
111
+ end
112
112
  end
113
113
 
114
114
  describe '#replace' do
@@ -116,32 +116,32 @@ describe ChunkyPNG::Canvas::Operations do
116
116
  subcanvas = ChunkyPNG::Canvas.new(3, 2, ChunkyPNG::Color.rgb(200, 255, 0))
117
117
  subject.replace(subcanvas, 5, 4).should == reference_canvas('replaced')
118
118
  end
119
-
119
+
120
120
  it "should not return itself" do
121
121
  subject.replace(ChunkyPNG::Canvas.new(1,1)).should_not equal(subject)
122
122
  end
123
-
123
+
124
124
  it "should leave the original intact" do
125
125
  subject.replace(ChunkyPNG::Canvas.new(1,1))
126
126
  subject.should == reference_canvas('operations')
127
127
  end
128
-
128
+
129
129
  it "should raise an exception when the pixels to replace fall outside the image" do
130
130
  lambda { subject.replace(ChunkyPNG::Canvas.new(1,1), 16, 16) }.should raise_error(ChunkyPNG::OutOfBounds)
131
131
  end
132
132
  end
133
-
133
+
134
134
  describe '#replace!' do
135
135
  it "should replace the correct pixels" do
136
136
  subcanvas = ChunkyPNG::Canvas.new(3, 2, ChunkyPNG::Color.rgb(200, 255, 0))
137
137
  subject.replace!(subcanvas, 5, 4)
138
138
  subject.should == reference_canvas('replaced')
139
139
  end
140
-
140
+
141
141
  it "should return itself" do
142
142
  subject.replace!(ChunkyPNG::Canvas.new(1,1)).should equal(subject)
143
143
  end
144
-
144
+
145
145
  it "should raise an exception when the pixels to replace fall outside the image" do
146
146
  lambda { subject.replace!(ChunkyPNG::Canvas.new(1,1), 16, 16) }.should raise_error(ChunkyPNG::OutOfBounds)
147
147
  end
@@ -149,7 +149,7 @@ describe ChunkyPNG::Canvas::Operations do
149
149
  end
150
150
 
151
151
  describe ChunkyPNG::Canvas::Operations do
152
-
152
+
153
153
  subject { ChunkyPNG::Canvas.new(2, 3, [1, 2, 3, 4, 5, 6]) }
154
154
 
155
155
  describe '#flip_horizontally!' do
@@ -157,7 +157,7 @@ describe ChunkyPNG::Canvas::Operations do
157
157
  subject.flip_horizontally!
158
158
  subject.should == ChunkyPNG::Canvas.new(2, 3, [5, 6, 3, 4, 1, 2])
159
159
  end
160
-
160
+
161
161
  it "should return itself" do
162
162
  subject.flip_horizontally!.should equal(subject)
163
163
  end
@@ -167,22 +167,22 @@ describe ChunkyPNG::Canvas::Operations do
167
167
  it "should flip the pixels horizontally" do
168
168
  subject.flip_horizontally.should == ChunkyPNG::Canvas.new(2, 3, [5, 6, 3, 4, 1, 2])
169
169
  end
170
-
170
+
171
171
  it "should not return itself" do
172
172
  subject.flip_horizontally.should_not equal(subject)
173
173
  end
174
-
174
+
175
175
  it "should return a copy of itself when applied twice" do
176
176
  subject.flip_horizontally.flip_horizontally.should == subject
177
177
  end
178
178
  end
179
-
179
+
180
180
  describe '#flip_vertically!' do
181
181
  it "should flip the pixels vertically" do
182
182
  subject.flip_vertically!
183
183
  subject.should == ChunkyPNG::Canvas.new(2, 3, [2, 1, 4, 3, 6, 5])
184
184
  end
185
-
185
+
186
186
  it "should return itself" do
187
187
  subject.flip_horizontally!.should equal(subject)
188
188
  end
@@ -192,11 +192,11 @@ describe ChunkyPNG::Canvas::Operations do
192
192
  it "should flip the pixels vertically" do
193
193
  subject.flip_vertically.should == ChunkyPNG::Canvas.new(2, 3, [2, 1, 4, 3, 6, 5])
194
194
  end
195
-
195
+
196
196
  it "should not return itself" do
197
197
  subject.flip_horizontally.should_not equal(subject)
198
198
  end
199
-
199
+
200
200
  it "should return a copy of itself when applied twice" do
201
201
  subject.flip_vertically.flip_vertically.should == subject
202
202
  end
@@ -206,38 +206,38 @@ describe ChunkyPNG::Canvas::Operations do
206
206
  it "should rotate the pixels 90 degrees counter-clockwise" do
207
207
  subject.rotate_left.should == ChunkyPNG::Canvas.new(3, 2, [2, 4, 6, 1, 3, 5] )
208
208
  end
209
-
209
+
210
210
  it "should not return itself" do
211
211
  subject.rotate_left.should_not equal(subject)
212
212
  end
213
-
213
+
214
214
  it "should not change the image dimensions" do
215
215
  lambda { subject.rotate_left }.should_not change(subject, :dimension)
216
216
  end
217
-
217
+
218
218
  it "it should rotate 180 degrees when applied twice" do
219
219
  subject.rotate_left.rotate_left.should == subject.rotate_180
220
220
  end
221
-
221
+
222
222
  it "it should rotate right when applied three times" do
223
223
  subject.rotate_left.rotate_left.rotate_left.should == subject.rotate_right
224
224
  end
225
-
225
+
226
226
  it "should return itself when applied four times" do
227
227
  subject.rotate_left.rotate_left.rotate_left.rotate_left.should == subject
228
228
  end
229
229
  end
230
-
230
+
231
231
  describe '#rotate_left!' do
232
232
  it "should rotate the pixels 90 degrees clockwise" do
233
233
  subject.rotate_left!
234
234
  subject.should == ChunkyPNG::Canvas.new(3, 2, [2, 4, 6, 1, 3, 5] )
235
235
  end
236
-
236
+
237
237
  it "should return itself" do
238
238
  subject.rotate_left!.should equal(subject)
239
239
  end
240
-
240
+
241
241
  it "should change the image dimensions" do
242
242
  lambda { subject.rotate_left! }.should change(subject, :dimension).from(ChunkyPNG::Dimension('2x3')).to(ChunkyPNG::Dimension('3x2'))
243
243
  end
@@ -247,38 +247,38 @@ describe ChunkyPNG::Canvas::Operations do
247
247
  it "should rotate the pixels 90 degrees clockwise" do
248
248
  subject.rotate_right.should == ChunkyPNG::Canvas.new(3, 2, [5, 3, 1, 6, 4, 2] )
249
249
  end
250
-
250
+
251
251
  it "should not return itself" do
252
252
  subject.rotate_right.should_not equal(subject)
253
253
  end
254
-
254
+
255
255
  it "should not change the image dimensions" do
256
256
  lambda { subject.rotate_right }.should_not change(subject, :dimension)
257
257
  end
258
-
258
+
259
259
  it "it should rotate 180 degrees when applied twice" do
260
260
  subject.rotate_right.rotate_right.should == subject.rotate_180
261
261
  end
262
-
262
+
263
263
  it "it should rotate left when applied three times" do
264
264
  subject.rotate_right.rotate_right.rotate_right.should == subject.rotate_left
265
265
  end
266
-
266
+
267
267
  it "should return itself when applied four times" do
268
268
  subject.rotate_right.rotate_right.rotate_right.rotate_right.should == subject
269
269
  end
270
270
  end
271
-
271
+
272
272
  describe '#rotate_right!' do
273
273
  it "should rotate the pixels 90 degrees clockwise" do
274
274
  subject.rotate_right!
275
275
  subject.should == ChunkyPNG::Canvas.new(3, 2, [5, 3, 1, 6, 4, 2] )
276
276
  end
277
-
277
+
278
278
  it "should return itself" do
279
279
  subject.rotate_right!.should equal(subject)
280
280
  end
281
-
281
+
282
282
  it "should change the image dimensions" do
283
283
  lambda { subject.rotate_right! }.should change(subject, :dimension).from(ChunkyPNG::Dimension('2x3')).to(ChunkyPNG::Dimension('3x2'))
284
284
  end
@@ -288,24 +288,101 @@ describe ChunkyPNG::Canvas::Operations do
288
288
  it "should rotate the pixels 180 degrees" do
289
289
  subject.rotate_180.should == ChunkyPNG::Canvas.new(2, 3, [6, 5, 4, 3, 2, 1])
290
290
  end
291
-
291
+
292
292
  it "should return not itself" do
293
293
  subject.rotate_180.should_not equal(subject)
294
294
  end
295
-
295
+
296
296
  it "should return a copy of itself when applied twice" do
297
297
  subject.rotate_180.rotate_180.should == subject
298
298
  end
299
299
  end
300
-
300
+
301
301
  describe '#rotate_180!' do
302
302
  it "should rotate the pixels 180 degrees" do
303
303
  subject.rotate_180!
304
304
  subject.should == ChunkyPNG::Canvas.new(2, 3, [6, 5, 4, 3, 2, 1])
305
305
  end
306
-
306
+
307
307
  it "should return itself" do
308
308
  subject.rotate_180!.should equal(subject)
309
309
  end
310
310
  end
311
311
  end
312
+
313
+ describe ChunkyPNG::Canvas::Operations do
314
+
315
+ subject { ChunkyPNG::Canvas.new(4, 4).rect(1, 1, 2, 2, 255, 255) }
316
+
317
+ describe "#trim" do
318
+ it "should trim the border" do
319
+ subject.trim.should == ChunkyPNG::Canvas.new(2, 2, 255)
320
+ end
321
+
322
+ it "should not return itself" do
323
+ subject.trim.should_not equal(subject)
324
+ end
325
+
326
+ it "should be able to fail to trim a specified color" do
327
+ lambda { subject.trim(ChunkyPNG::Color::BLACK) }.should_not change(subject, :pixels)
328
+ end
329
+
330
+ it "should be the same after trimming an added border" do
331
+ subject.border(2).trim.should == subject
332
+ end
333
+ end
334
+
335
+ describe "#trim!" do
336
+ it "should trim the border" do
337
+ subject.trim!
338
+ subject.should == ChunkyPNG::Canvas.new(2, 2, 255)
339
+ end
340
+
341
+ it "should return itself" do
342
+ subject.trim!.should equal(subject)
343
+ end
344
+
345
+ it "should change the image dimensions" do
346
+ lambda { subject.trim! }.should change(subject, :dimension).from(ChunkyPNG::Dimension('4x4')).to(ChunkyPNG::Dimension('2x2'))
347
+ end
348
+ end
349
+ end
350
+
351
+ describe ChunkyPNG::Canvas::Operations do
352
+
353
+ subject { ChunkyPNG::Canvas.new(4, 4) }
354
+
355
+ describe "#border" do
356
+ it "should add the border" do
357
+ subject.border(2).should == reference_canvas('operations_border')
358
+ end
359
+
360
+ it "should not return itself" do
361
+ subject.border(1).should_not equal(subject)
362
+ end
363
+
364
+ it "should retain transparency" do
365
+ ChunkyPNG::Canvas.new(1, 1).border(1).pixels.should include(0)
366
+ end
367
+ end
368
+
369
+ describe "#border!" do
370
+ it "should add the border" do
371
+ subject.border!(2)
372
+ subject.should == reference_canvas('operations_border')
373
+ end
374
+
375
+ it "should return itself" do
376
+ subject.border!(1).should equal(subject)
377
+ end
378
+
379
+ it "should retain transparency" do
380
+ subject.border!(1)
381
+ subject.pixels.should include(0)
382
+ end
383
+
384
+ it "should change the image dimensions" do
385
+ lambda { subject.border!(1) }.should change(subject, :dimension).from(ChunkyPNG::Dimension('4x4')).to(ChunkyPNG::Dimension('6x6'))
386
+ end
387
+ end
388
+ end
@@ -88,18 +88,23 @@ describe ChunkyPNG::Color do
88
88
  end
89
89
 
90
90
  describe '#from_hex' do
91
- it "should load colors correctlt from hex notation" do
91
+ it "should load colors correctly from hex notation" do
92
92
  from_hex('0a649664').should == @non_opaque
93
93
  from_hex('#0a649664').should == @non_opaque
94
94
  from_hex('0x0a649664').should == @non_opaque
95
95
  from_hex('0a6496').should == @opaque
96
96
  from_hex('#0a6496').should == @opaque
97
97
  from_hex('0x0a6496').should == @opaque
98
+ from_hex('abc').should == 0xaabbccff
99
+ from_hex('#abc').should == 0xaabbccff
100
+ from_hex('0xabc').should == 0xaabbccff
98
101
  end
99
102
 
100
- it "should allow setting opacity explicitely" do
103
+ it "should allow setting opacity explicitly" do
101
104
  from_hex('0x0a6496', 0x64).should == @non_opaque
102
105
  from_hex('#0a6496', 0x64).should == @non_opaque
106
+ from_hex('0xabc', 0xdd).should == 0xaabbccdd
107
+ from_hex('#abc', 0xdd).should == 0xaabbccdd
103
108
  end
104
109
  end
105
110
 
@@ -113,7 +118,7 @@ describe ChunkyPNG::Color do
113
118
  html_color('SPRING_GREEN').should == 0x00ff7fff
114
119
  end
115
120
 
116
- it "should set the opacity level explicitely" do
121
+ it "should set the opacity level explicitly" do
117
122
  html_color(:springgreen, 0xff).should == 0x00ff7fff
118
123
  html_color(:springgreen, 0xaa).should == 0x00ff7faa
119
124
  html_color(:springgreen, 0x00).should == 0x00ff7f00
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chunky_png
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.3.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Willem van Bergen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-17 00:00:00.000000000 Z
12
+ date: 2014-02-10 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rake
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ! '>='
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rspec
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -358,6 +363,7 @@ files:
358
363
  - spec/resources/damaged_signature.png
359
364
  - spec/resources/lines.png
360
365
  - spec/resources/operations.png
366
+ - spec/resources/operations_border.png
361
367
  - spec/resources/operations_grayscale.png
362
368
  - spec/resources/partial_circles.png
363
369
  - spec/resources/pixelstream.rgb
@@ -378,7 +384,6 @@ files:
378
384
  homepage: http://wiki.github.com/wvanbergen/chunky_png
379
385
  licenses:
380
386
  - MIT
381
- metadata: {}
382
387
  post_install_message:
383
388
  rdoc_options:
384
389
  - --title
@@ -390,20 +395,22 @@ rdoc_options:
390
395
  require_paths:
391
396
  - lib
392
397
  required_ruby_version: !ruby/object:Gem::Requirement
398
+ none: false
393
399
  requirements:
394
400
  - - ! '>='
395
401
  - !ruby/object:Gem::Version
396
402
  version: '0'
397
403
  required_rubygems_version: !ruby/object:Gem::Requirement
404
+ none: false
398
405
  requirements:
399
406
  - - ! '>='
400
407
  - !ruby/object:Gem::Version
401
408
  version: '0'
402
409
  requirements: []
403
410
  rubyforge_project:
404
- rubygems_version: 2.0.7
411
+ rubygems_version: 1.8.23
405
412
  signing_key:
406
- specification_version: 4
413
+ specification_version: 3
407
414
  summary: Pure ruby library for read/write, chunk-level access to PNG files
408
415
  test_files:
409
416
  - spec/chunky_png/canvas/adam7_interlacing_spec.rb
@@ -669,6 +676,7 @@ test_files:
669
676
  - spec/resources/damaged_signature.png
670
677
  - spec/resources/lines.png
671
678
  - spec/resources/operations.png
679
+ - spec/resources/operations_border.png
672
680
  - spec/resources/operations_grayscale.png
673
681
  - spec/resources/partial_circles.png
674
682
  - spec/resources/pixelstream.rgb
@@ -685,4 +693,3 @@ test_files:
685
693
  - spec/resources/text_chunk.png
686
694
  - spec/resources/ztxt_chunk.png
687
695
  - spec/spec_helper.rb
688
- has_rdoc:
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YzUzNWM2NzJlMTZkMWE4ZTkwZDQ3ZWVmYWViYzg4YjQ0YTEyM2JiNw==
5
- data.tar.gz: !binary |-
6
- YzljODZlMWYxMWI5ZjQ5ZDVhNmRhMDlmNjRiMDY4OThhOTVmZGZlMw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- YTU4ZjZhMWQ4NDU0ZTU1MDMwNzdkZDQxMjMwMWQxNWE5NDljNmI5OWQ0NDNi
10
- MDA2NmZlODIyY2Q4NjYxYTM1NDAzODQxYmNiMzI2NzU5MzI3ZTIzZTRlMWE2
11
- YWNlMDVjYjJiM2QwMzc3YWE5ZDZlMGZkY2Y3OGI1ZDQ0YzFmOTU=
12
- data.tar.gz: !binary |-
13
- YjQyY2RhNzdhMWUyMTY2M2RiMTNiN2MwMzdkY2U2MzAxODA4ZmM3NDI4NTM2
14
- ZTM2MDc5ZDA5NmZlNzg5ZDc3YjYyNjdiMDYxMDQ1YjJiY2IxY2JhZTVjOTFi
15
- ZjczMWY3MjA4NDhmZThhMTNlMWEzYjNhMTUxYWRiMmU3MWFmNzI=