png 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6a402194fe1cbe6b3c0046da8f2762b0eb663dfb
4
+ data.tar.gz: 3abefbe75ec174dae717a1f951fb1f052fca2a4e
5
+ SHA512:
6
+ metadata.gz: 90dde7c2914c3b20dd54ff1b0bb1a358fffe9896ef5fa13663c44cc3d2dac64e9db53687b7144e7fb14806d009baea163259c51eac8d03e510b2136325f35d1b
7
+ data.tar.gz: 00531adf917fae6c8cb8d082189dc40584bbc8152c93ad7d0126c740dd9d1f4e4984ac692402b69b79df378b8c30b482e29831845dac0ebcea8a97186866a833
@@ -0,0 +1,4 @@
1
+ O<��ݶ;�����%}�†�`x�����ɂ�e��O��w� ̪�|���Y5�d���ߑ���)?6�C)�t���uz�f�)�U�{�E$Z�nS�;�p/��E0�6�H O5"M��7L���6V
2
+ ���]������4�g�����뼼fk�W)
3
+ <]*i@\`�Ĉ�n���h�7�X>�$�~q6z��44��B�;����F4�I2XE�;�q_���z�Z��ʋ�~{��
4
+ 43�����o觘{�����
data.tar.gz.sig CHANGED
@@ -1,2 +1,4 @@
1
- iʍ��/�7]L��;�OP�C��TZ3W��=�*�̒]}9���؃������o2�Њ�
2
- 4��.���v��ud�L-f�ҹ�ns�%�<���STaXtp[�+�W��_�}�wyәv�X�}�õ�e!{PEEAz��@�h�c�&^�,�Z˥[�`Ï7�yʈv��qK�^� �C)��{�5����
1
+ ��x��,G�?����
2
+ �@0�>l]Y
3
+ T�)˄1.�{BD���5���jp��
4
+ �dJ1�I��d�\}�e�?��7�z�'
File without changes
@@ -1,3 +1,14 @@
1
+ === 1.2.1 / 2015-04-13
2
+
3
+ WOW! SIX YEARS!!
4
+
5
+ * 4 bug fixes:
6
+
7
+ * 1.9: quelled warnings
8
+ * 2.0: Added ascii-8bit encoding to test file to bypass new utf-8 default
9
+ * Rakefile cleanup. Use isolate. Nuke pathing.
10
+ * Removed dead rubyforge setting in Rakefile
11
+
1
12
  === 1.2.0 / 2009-06-23
2
13
 
3
14
  * 26 minor enhancements:
@@ -56,5 +67,7 @@
56
67
 
57
68
  === 1.0.0 / 2006-09-31
58
69
 
59
- * Birthday!
70
+ * 1 major enhancement:
71
+
72
+ * Birthday!
60
73
 
data/README.txt CHANGED
@@ -14,7 +14,7 @@ without any C libraries.
14
14
  * Basic PNG reader as well (someday it might do compositing and the like!).
15
15
  * Almost pure ruby, does require a compiler.
16
16
 
17
- == SYNOPSYS
17
+ == SYNOPSIS
18
18
 
19
19
  require 'png'
20
20
 
data/Rakefile CHANGED
@@ -1,18 +1,11 @@
1
- $: << "../../RubyInline/dev/lib"
2
- $: << "../../hoe/dev/lib"
1
+ require "hoe"
3
2
 
4
- require 'hoe'
5
-
6
- Hoe.add_include_dirs "../../hoe/dev/lib" # HACK remove
7
- Hoe.add_include_dirs "../../RubyInline/dev/lib", "lib"
8
3
  Hoe.plugin :seattlerb
9
4
  Hoe.plugin :inline
5
+ Hoe.plugin :isolate
10
6
 
11
- Hoe.spec 'png' do
12
- developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
13
- developer 'Eric Hodel', 'drbrain@segment7.net'
14
-
15
- self.rubyforge_name = 'seattlerb'
7
+ Hoe.spec "png" do
8
+ developer "Ryan Davis", "ryand-ruby@zenspider.com"
16
9
  end
17
10
 
18
11
  # vim: syntax=Ruby
@@ -1,7 +1,7 @@
1
1
  #!/usr/local/bin/ruby -w
2
2
 
3
- require 'png'
4
- require 'png/font'
3
+ require "png"
4
+ require "png/font"
5
5
 
6
6
  canvas = PNG::Canvas.new 201, 201, PNG::Color::White
7
7
 
@@ -13,8 +13,8 @@ canvas.line 100, 50, 200, 75, PNG::Color::Green
13
13
  canvas.line 0, 200, 200, 0, PNG::Color::Black
14
14
  canvas.line 0, 200, 150, 0, PNG::Color::Red
15
15
 
16
- canvas.annotate 'Hello World', 10, 10
16
+ canvas.annotate "Hello World", 10, 10
17
17
 
18
18
  png = PNG.new canvas
19
- png.save 'blah.png'
19
+ png.save "blah.png"
20
20
  `open blah.png`
@@ -1,4 +1,4 @@
1
- require 'png'
1
+ require "png"
2
2
 
3
3
  class PNGProfile
4
4
 
@@ -1,4 +1,4 @@
1
- require 'png'
1
+ require "png"
2
2
 
3
3
  class PNGProfileLine
4
4
 
data/lib/png.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # encoding: BINARY
2
2
 
3
- require 'rubygems'
4
- require 'zlib'
5
- require 'inline'
3
+ require "rubygems"
4
+ require "zlib"
5
+ require "inline"
6
6
 
7
7
  unless "".respond_to? :getbyte then
8
8
  class String
@@ -16,6 +16,10 @@ class String # :nodoc: # ZenTest SKIP
16
16
  unsigned long png_crc() {
17
17
  static unsigned long crc[256];
18
18
  static char crc_table_computed = 0;
19
+ unsigned long c = 0xffffffff;
20
+ size_t len = RSTRING_LEN(self);
21
+ char * s = StringValuePtr(self);
22
+ unsigned i;
19
23
 
20
24
  if (! crc_table_computed) {
21
25
  unsigned long c;
@@ -31,11 +35,6 @@ class String # :nodoc: # ZenTest SKIP
31
35
  crc_table_computed = 1;
32
36
  }
33
37
 
34
- unsigned long c = 0xffffffff;
35
- unsigned len = RSTRING_LEN(self);
36
- char * s = StringValuePtr(self);
37
- unsigned i;
38
-
39
38
  for (i = 0; i < len; i++) {
40
39
  c = crc[(c ^ s[i]) & 0xff] ^ (c >> 8);
41
40
  }
@@ -45,7 +44,7 @@ class String # :nodoc: # ZenTest SKIP
45
44
  EOM
46
45
  end
47
46
  rescue CompilationError => e
48
- warn "COMPLIATION ERROR: #{e}"
47
+ warn "COMPILATION ERROR: #{e}"
49
48
 
50
49
  unless defined? @@crc then
51
50
  @@crc = Array.new(256)
@@ -61,12 +60,12 @@ rescue CompilationError => e
61
60
  ##
62
61
  # Calculates a CRC using the algorithm in the PNG specification.
63
62
 
64
- def png_crc()
63
+ def png_crc
65
64
  c = 0xffffffff
66
65
  each_byte do |b|
67
66
  c = @@crc[(c^b) & 0xff] ^ (c >> 8)
68
67
  end
69
- return c ^ 0xffffffff
68
+ c ^ 0xffffffff
70
69
  end
71
70
  end
72
71
 
@@ -99,7 +98,7 @@ end
99
98
  # bottom left.
100
99
 
101
100
  class PNG
102
- VERSION = '1.2.0'
101
+ VERSION = "1.2.1"
103
102
  SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10].pack("C*")
104
103
 
105
104
  # Color Types:
@@ -127,12 +126,13 @@ class PNG
127
126
 
128
127
  builder.c <<-EOM
129
128
  VALUE png_join() {
130
- int i, j;
131
- VALUE data = rb_iv_get(self, "@data");
132
- unsigned int data_len = RARRAY_LEN(data);
133
- unsigned int row_len = RARRAY_LEN(RARRAY_PTR(data)[0]);
134
- unsigned long size = data_len * (1 + (row_len * 4));
135
- char * result = malloc(size);
129
+ size_t i, j;
130
+ VALUE data = rb_iv_get(self, "@data");
131
+ size_t data_len = RARRAY_LEN(data);
132
+ size_t row_len = RARRAY_LEN(RARRAY_PTR(data)[0]);
133
+ size_t size = data_len * (1 + (row_len * 4));
134
+ char * result = malloc(size);
135
+
136
136
  unsigned long idx = 0;
137
137
  for (i = 0; i < data_len; i++) {
138
138
  VALUE row = RARRAY_PTR(data)[i];
@@ -153,21 +153,21 @@ class PNG
153
153
  end
154
154
  rescue CompilationError
155
155
  def png_join
156
- @data.map { |row| "\0" + row.map { |p| p.values }.join }.join
156
+ @data.map { |row| "\0" + row.map(&:values).join }.join
157
157
  end
158
158
  end
159
159
 
160
160
  ##
161
161
  # Creates a PNG chunk of type +type+ that contains +data+.
162
162
 
163
- def self.chunk(type, data="")
163
+ def self.chunk type, data = ""
164
164
  [data.size, type, data, (type + data).png_crc].pack("Na*a*N")
165
165
  end
166
166
 
167
167
  ##
168
168
  # Creates a new PNG object using +canvas+
169
169
 
170
- def initialize(canvas)
170
+ def initialize canvas
171
171
  @height = canvas.height
172
172
  @width = canvas.width
173
173
  @bits = 8
@@ -177,8 +177,8 @@ class PNG
177
177
  ##
178
178
  # Writes the PNG to +path+.
179
179
 
180
- def save(path)
181
- File.open path, 'wb' do |f|
180
+ def save path
181
+ File.open path, "wb" do |f|
182
182
  f.write to_blob
183
183
  end
184
184
  end
@@ -192,9 +192,9 @@ class PNG
192
192
  header = [@width, @height, @bits, RGBA, NONE, NONE, NONE]
193
193
 
194
194
  blob << SIGNATURE
195
- blob << PNG.chunk('IHDR', header.pack("N2C5"))
196
- blob << PNG.chunk('IDAT', Zlib::Deflate.deflate(self.png_join))
197
- blob << PNG.chunk('IEND', '')
195
+ blob << PNG.chunk("IHDR", header.pack("N2C5"))
196
+ blob << PNG.chunk("IDAT", Zlib::Deflate.deflate(self.png_join))
197
+ blob << PNG.chunk("IEND", "")
198
198
  blob.join
199
199
  end
200
200
 
@@ -214,7 +214,7 @@ class PNG
214
214
 
215
215
  def self.from str, name = nil
216
216
  str = "%08x" % str if Integer === str
217
- colors = str.scan(/[\da-f][\da-f]/i).map { |n| n.hex }
217
+ colors = str.scan(/[\da-f][\da-f]/i).map(&:hex)
218
218
  colors << name
219
219
  self.new(*colors)
220
220
  end
@@ -255,8 +255,8 @@ class PNG
255
255
  # "Bitwise or" as applied to colors. Background color is
256
256
  # considered false.
257
257
 
258
- def | o
259
- self == Background ? o : self
258
+ def | other
259
+ self == Background ? other : self
260
260
  end
261
261
 
262
262
  def hash # :nodoc:
@@ -294,15 +294,15 @@ class PNG
294
294
  # Blends +color+ into this color returning a new blended color.
295
295
 
296
296
  def blend color
297
- return Color.new(((r + color.r) / 2), ((g + color.g) / 2),
298
- ((b + color.b) / 2), ((a + color.a) / 2))
297
+ Color.new(((r + color.r) / 2), ((g + color.g) / 2),
298
+ ((b + color.b) / 2), ((a + color.a) / 2))
299
299
  end
300
300
 
301
301
  ##
302
302
  # Returns a new color with an alpha value adjusted by +i+.
303
303
 
304
304
  def intensity i
305
- return Color.new(r,g,b,(a*i) >> 8)
305
+ Color.new(r, g, b, (a*i) >> 8)
306
306
  end
307
307
 
308
308
  def inspect # :nodoc:
@@ -318,11 +318,11 @@ class PNG
318
318
  # art!
319
319
 
320
320
  def to_ascii
321
- return ' ' if a == 0x00
321
+ return " " if a == 0x00
322
322
 
323
323
  brightness = (((r + g + b) / 3) * a) / 0xFF
324
324
 
325
- %w(.. ,, ++ 00)[brightness / 64]
325
+ %w[.. ,, ++ 00][brightness / 64]
326
326
  end
327
327
 
328
328
  def to_s # :nodoc:
@@ -341,26 +341,26 @@ class PNG
341
341
  unless s == 0.0 then
342
342
  h += 255 if h < 0
343
343
  h = h / 255.0 * 6.0
344
- s = s / 255.0
345
- v = v / 255.0
344
+ s /= 255.0
345
+ v /= 255.0
346
346
  i = h.floor
347
347
  f = h - i
348
348
  p = v * (1 - (s))
349
349
  q = v * (1 - (s * (f)))
350
350
  w = v * (1 - (s * (1-f)))
351
351
  r, g, b = case i
352
- when 0,6 then
353
- [ v, w, p ]
352
+ when 0, 6 then
353
+ [v, w, p]
354
354
  when 1 then
355
- [ q, v, p ]
355
+ [q, v, p]
356
356
  when 2 then
357
- [ p, v, w ]
357
+ [p, v, w]
358
358
  when 3 then
359
- [ p, q, v ]
359
+ [p, q, v]
360
360
  when 4 then
361
- [ w, p, v ]
361
+ [w, p, v]
362
362
  when 5 then
363
- [ v, p, q ]
363
+ [v, p, q]
364
364
  else
365
365
  raise [h, s, v, i, f, p, q, w].inspect
366
366
  end
@@ -420,7 +420,7 @@ class PNG
420
420
  def initialize width, height, background = Color::Background
421
421
  @width = width
422
422
  @height = height
423
- @data = Array.new(@height) { |x| Array.new(@width, background) }
423
+ @data = Array.new(@height) { Array.new(@width, background) }
424
424
  end
425
425
 
426
426
  ##
@@ -489,14 +489,14 @@ class PNG
489
489
  end
490
490
 
491
491
  def inspect # :nodoc:
492
- '#<%s %dx%d>' % [self.class, @width, @height]
492
+ "#<%s %dx%d>" % [self.class, @width, @height]
493
493
  end
494
494
 
495
495
  ##
496
496
  # Blends +color+ onto the color at point (+x+, +y+).
497
497
 
498
- def point(x, y, color)
499
- self[x,y] = self[x,y].blend(color)
498
+ def point x, y, color
499
+ self[x, y] = self[x, y].blend(color)
500
500
  end
501
501
 
502
502
  ##
@@ -504,7 +504,7 @@ class PNG
504
504
  #
505
505
  # http://en.wikipedia.org/wiki/Xiaolin_Wu's_line_algorithm
506
506
 
507
- def line(x0, y0, x1, y1, color)
507
+ def line x0, y0, x1, y1, color
508
508
  y0, y1, x0, x1 = y1, y0, x1, x0 if y0 > y1
509
509
  dx = x1 - x0
510
510
  sx = dx < 0 ? -1 : 1
@@ -513,7 +513,7 @@ class PNG
513
513
 
514
514
  # 'easy' cases
515
515
  if dy == 0 then
516
- Range.new(*[x0,x1].sort).each do |x|
516
+ Range.new(*[x0, x1].sort).each do |x|
517
517
  point(x, y0, color)
518
518
  end
519
519
  return
@@ -539,12 +539,12 @@ class PNG
539
539
  e_acc = 0
540
540
  if dy > dx then # vertical displacement
541
541
  e = (dx << 16) / dy
542
- (y0...y1-1).each do |i|
542
+ (y0...y1-1).each do
543
543
  e_acc_temp, e_acc = e_acc, (e_acc + e) & 0xFFFF
544
- x0 = x0 + sx if (e_acc <= e_acc_temp)
544
+ x0 += sx if (e_acc <= e_acc_temp)
545
545
  w = 0xFF-(e_acc >> 8)
546
546
  point(x0, y0, color.intensity(w))
547
- y0 = y0 + 1
547
+ y0 += 1
548
548
  point(x0 + sx, y0, color.intensity(0xFF-w))
549
549
  end
550
550
  point(x1, y1, color)
@@ -553,7 +553,7 @@ class PNG
553
553
 
554
554
  # horizontal displacement
555
555
  e = (dy << 16) / dx
556
- (dx - 1).downto(0) do |i|
556
+ (dx - 1).downto(0) do
557
557
  e_acc_temp, e_acc = e_acc, (e_acc + e) & 0xFFFF
558
558
  y0 += 1 if (e_acc <= e_acc_temp)
559
559
  w = 0xFF-(e_acc >> 8)
@@ -580,7 +580,7 @@ class PNG
580
580
  image << "\n"
581
581
  end
582
582
 
583
- return image.join
583
+ image.join
584
584
  end
585
585
  end # Canvas
586
586
  end
@@ -1,14 +1,14 @@
1
1
  # encoding: BINARY
2
2
 
3
- require 'png/reader'
3
+ require "png/reader"
4
4
 
5
5
  ##
6
6
  # Implements a simple bitmap font by extracting letters from a PNG.
7
7
 
8
8
  class PNG::Font
9
- LETTERS = (('A'..'Z').to_a +
10
- ('a'..'z').to_a +
11
- ('0'..'9').to_a + [" "] * 16 +
9
+ LETTERS = (("A".."Z").to_a +
10
+ ("a".."z").to_a +
11
+ ("0".."9").to_a + [" "] * 16 +
12
12
  '({[<!@#$%^&*?_+-=;,"/~>]})'.split(//))
13
13
 
14
14
  attr_reader :height, :width, :canvas
@@ -17,7 +17,7 @@ class PNG::Font
17
17
  @@default ||= new(File.join(File.dirname(__FILE__), "default_font.png"))
18
18
  end
19
19
 
20
- def initialize(png_file)
20
+ def initialize png_file
21
21
  @canvas = PNG.load_file png_file
22
22
  @height, @width = canvas.height / 4, canvas.width / 26
23
23
  @cache = {}
@@ -50,8 +50,8 @@ class PNG::Canvas
50
50
  #
51
51
  # require 'png/font'
52
52
 
53
- def annotate(string, x, y,
54
- font = PNG::Font.default, align = :left, style = :overwrite)
53
+ def annotate string, x, y,
54
+ font = PNG::Font.default, align = :left, style = :overwrite
55
55
  case align
56
56
  when :left then
57
57
  # do nothing