chunky_png 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/chunky_png.gemspec +2 -2
- data/lib/chunky_png.rb +1 -1
- data/lib/chunky_png/canvas/stream_exporting.rb +18 -1
- data/spec/chunky_png/canvas/stream_exporting_spec.rb +46 -7
- data/spec/chunky_png_spec.rb +3 -32
- data/spec/png_suite_spec.rb +0 -14
- data/spec/spec_helper.rb +6 -0
- metadata +3 -3
data/chunky_png.gemspec
CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
|
|
3
3
|
|
4
4
|
# Do not change the version and date fields by hand. This will be done
|
5
5
|
# automatically by the gem release script.
|
6
|
-
s.version = "1.1.
|
7
|
-
s.date = "2011-
|
6
|
+
s.version = "1.1.1"
|
7
|
+
s.date = "2011-04-22"
|
8
8
|
|
9
9
|
s.summary = "Pure ruby library for read/write, chunk-level access to PNG files"
|
10
10
|
s.description = <<-EOT
|
data/lib/chunky_png.rb
CHANGED
@@ -25,7 +25,7 @@ module ChunkyPNG
|
|
25
25
|
|
26
26
|
# The current version of ChunkyPNG. This value will be updated
|
27
27
|
# automatically by them <tt>gem:release</tt> rake task.
|
28
|
-
VERSION = "1.1.
|
28
|
+
VERSION = "1.1.1"
|
29
29
|
|
30
30
|
###################################################
|
31
31
|
# PNG international standard defined constants
|
@@ -23,7 +23,24 @@ module ChunkyPNG
|
|
23
23
|
#
|
24
24
|
# @return [String] The RGB-formatted pixel data.
|
25
25
|
def to_rgb_stream
|
26
|
-
pixels.pack('NX' *
|
26
|
+
pixels.pack('NX' * pixels.length)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Creates a stream of the alpha channel of this canvas.
|
30
|
+
#
|
31
|
+
# @return [String] The 0-255 alpha values of all pixels packed as string
|
32
|
+
def to_alpha_channel_stream
|
33
|
+
pixels.pack('C*')
|
34
|
+
end
|
35
|
+
|
36
|
+
# Creates a grayscale stream of this canvas.
|
37
|
+
#
|
38
|
+
# This method assume sthat this image is fully grayscale, i.e. R = G = B for
|
39
|
+
# every pixel. The alpha channel will not be included in the stream.
|
40
|
+
#
|
41
|
+
# @return [String] The 0-255 grayscale values of all pixels packed as string.
|
42
|
+
def to_grayscale_stream
|
43
|
+
pixels.pack('nX' * pixels.length)
|
27
44
|
end
|
28
45
|
|
29
46
|
# Creates an ABGR-formatted pixelstream with the pixel data from this canvas.
|
@@ -3,18 +3,57 @@ require 'spec_helper'
|
|
3
3
|
describe ChunkyPNG::Canvas do
|
4
4
|
|
5
5
|
describe '#to_rgba_stream' do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
it "should export a sample canvas to an RGBA stream correctly" do
|
7
|
+
canvas = ChunkyPNG::Canvas.new(2, 2, [ChunkyPNG::Color.rgba(1,2,3,4), ChunkyPNG::Color.rgba(5,6,7,8),
|
8
|
+
ChunkyPNG::Color.rgba(4,3,2,1), ChunkyPNG::Color.rgba(8,7,6,5)])
|
9
|
+
|
10
|
+
canvas.to_rgba_stream.should == [1,2,3,4,5,6,7,8,4,3,2,1,8,7,6,5].pack('C16')
|
10
11
|
end
|
12
|
+
|
13
|
+
it "should export an image to an RGBA datastream correctly" do
|
14
|
+
reference_canvas('pixelstream_reference').to_rgba_stream.should == resource_data('pixelstream.rgba')
|
15
|
+
end
|
11
16
|
end
|
12
17
|
|
13
18
|
describe '#to_rgb_stream' do
|
14
|
-
|
19
|
+
it "should export a sample canvas to an RGBA stream correctly" do
|
20
|
+
canvas = ChunkyPNG::Canvas.new(2, 2, [ChunkyPNG::Color.rgba(1,2,3,4), ChunkyPNG::Color.rgba(5,6,7,8),
|
21
|
+
ChunkyPNG::Color.rgba(4,3,2,1), ChunkyPNG::Color.rgba(8,7,6,5)])
|
22
|
+
|
23
|
+
canvas.to_rgb_stream.should == [1,2,3,5,6,7,4,3,2,8,7,6].pack('C12')
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should export an image to an RGB datastream correctly" do
|
27
|
+
reference_canvas('pixelstream_reference').to_rgb_stream.should == resource_data('pixelstream.rgb')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#to_grayscale_stream' do
|
32
|
+
|
33
|
+
it "should export a grayscale image to a grayscale datastream correctly" do
|
34
|
+
canvas = ChunkyPNG::Canvas.new(2, 2, [ChunkyPNG::Color.grayscale(1), ChunkyPNG::Color.grayscale(2),
|
35
|
+
ChunkyPNG::Color.grayscale(3), ChunkyPNG::Color.grayscale(4)])
|
36
|
+
canvas.to_grayscale_stream.should == [1,2,3,4].pack('C4')
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
it "should export a color image to a grayscale datastream, using B values" do
|
41
|
+
canvas = ChunkyPNG::Canvas.new(2, 2, [ChunkyPNG::Color.rgba(1,2,3,4), ChunkyPNG::Color.rgba(5,6,7,8),
|
42
|
+
ChunkyPNG::Color.rgba(4,3,2,1), ChunkyPNG::Color.rgba(8,7,6,5)])
|
43
|
+
canvas.to_grayscale_stream.should == [3,7,2,6].pack('C4')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#to_alpha_channel_stream' do
|
48
|
+
it "should export an opaque image to an alpha channel datastream correctly" do
|
49
|
+
grayscale_array = Array.new(reference_canvas('pixelstream_reference').pixels.length, 255)
|
50
|
+
reference_canvas('pixelstream_reference').to_alpha_channel_stream.should == grayscale_array.pack('C*')
|
51
|
+
end
|
15
52
|
|
16
|
-
it "should
|
17
|
-
|
53
|
+
it "should export a transparent image to an alpha channel datastream correctly" do
|
54
|
+
canvas = ChunkyPNG::Canvas.new(2, 2, [ChunkyPNG::Color.rgba(1,2,3,4), ChunkyPNG::Color.rgba(5,6,7,8),
|
55
|
+
ChunkyPNG::Color.rgba(4,3,2,1), ChunkyPNG::Color.rgba(8,7,6,5)])
|
56
|
+
canvas.to_alpha_channel_stream.should == [4,8,1,5].pack('C4')
|
18
57
|
end
|
19
58
|
end
|
20
59
|
end
|
data/spec/chunky_png_spec.rb
CHANGED
@@ -1,37 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ChunkyPNG do
|
4
|
-
|
5
|
-
# it "should create reference images for all color modes" do
|
6
|
-
# image = ChunkyPNG::Image.new(10, 10, ChunkyPNG::Color.rgb(100, 100, 100))
|
7
|
-
# [:indexed, :grayscale, :grayscale_alpha, :truecolor, :truecolor_alpha].each do |color_mode|
|
8
|
-
#
|
9
|
-
# color_mode_id = ChunkyPNG.const_get("COLOR_#{color_mode.to_s.upcase}")
|
10
|
-
# filename = resource_file("gray_10x10_#{color_mode}.png")
|
11
|
-
# image.save(filename, :color_mode => color_mode_id)
|
12
|
-
# end
|
13
|
-
# end
|
14
|
-
|
15
|
-
# it "should create a reference image for operations" do
|
16
|
-
# image = ChunkyPNG::Image.new(16, 16, ChunkyPNG::Color::WHITE)
|
17
|
-
# r = 0
|
18
|
-
# image.width.times do |x|
|
19
|
-
# g = 0
|
20
|
-
# image.height.times do |y|
|
21
|
-
# image[x, y] = ChunkyPNG::Color.rgb(r, g, 255)
|
22
|
-
# g += 16
|
23
|
-
# end
|
24
|
-
# r += 16
|
25
|
-
# end
|
26
|
-
# filename = resource_file('operations.png')
|
27
|
-
# image.save(filename)
|
28
|
-
# # `open #{filename}`
|
29
|
-
# end
|
30
4
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
# image.save(resource_file('damaged_chunk.png'))
|
35
|
-
# end
|
5
|
+
it "should have a VERSION constant" do
|
6
|
+
ChunkyPNG.const_defined?('VERSION').should be_true
|
7
|
+
end
|
36
8
|
end
|
37
|
-
|
data/spec/png_suite_spec.rb
CHANGED
@@ -14,20 +14,6 @@ describe 'PNG testuite' do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context 'Decoding unsupported images' do
|
18
|
-
|
19
|
-
# TODO: we eventually want to support these!
|
20
|
-
|
21
|
-
png_suite_files(:basic_not_supported).each do |file|
|
22
|
-
color_mode = file.match(/[in](\d)[apgc](\d\d)\.png$/)[1].to_i
|
23
|
-
bit_depth = file.match(/[in](\d)[apgc](\d\d)\.png$/)[2].to_i
|
24
|
-
|
25
|
-
it "should report #{File.basename(file)} (color mode: #{color_mode}, bit depth: #{bit_depth}) as unsupported" do
|
26
|
-
lambda { ChunkyPNG::Image.from_file(file) }.should raise_error(ChunkyPNG::NotSupported)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
17
|
context 'Decoding supported images' do
|
32
18
|
png_suite_files(:basic, '*.png').each do |file|
|
33
19
|
|
data/spec/spec_helper.rb
CHANGED
@@ -24,6 +24,12 @@ module ResourceFileHelper
|
|
24
24
|
File.expand_path("./resources/#{name}", File.dirname(__FILE__))
|
25
25
|
end
|
26
26
|
|
27
|
+
def resource_data(name)
|
28
|
+
data = nil
|
29
|
+
File.open(resource_file(name), 'rb') { |f| data = f.read }
|
30
|
+
data
|
31
|
+
end
|
32
|
+
|
27
33
|
def reference_canvas(name)
|
28
34
|
ChunkyPNG::Canvas.from_file(resource_file("#{name}.png"))
|
29
35
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 1.1.
|
8
|
+
- 1
|
9
|
+
version: 1.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Willem van Bergen
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-04-22 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|