chunky_png 0.10.5 → 0.11.0
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.
- data/Gemfile.lock +1 -1
- data/benchmarks/filesize_benchmark.rb +1 -1
- data/chunky_png.gemspec +4 -4
- data/lib/chunky_png.rb +4 -11
- data/lib/chunky_png/canvas.rb +7 -8
- data/lib/chunky_png/canvas/adam7_interlacing.rb +36 -18
- data/lib/chunky_png/canvas/png_decoding.rb +258 -36
- data/lib/chunky_png/canvas/png_encoding.rb +1 -1
- data/lib/chunky_png/color.rb +41 -5
- data/lib/chunky_png/compatibility.rb +15 -0
- data/lib/chunky_png/datastream.rb +6 -0
- data/spec/chunky_png/canvas/adam7_interlacing_spec.rb +7 -7
- data/spec/chunky_png/canvas/png_decoding_spec.rb +33 -20
- data/spec/chunky_png/canvas/png_encoding_spec.rb +2 -3
- data/spec/chunky_png/color_spec.rb +29 -0
- data/spec/chunky_png/datastream_spec.rb +0 -5
- data/spec/chunky_png/rmagick_spec.rb +3 -3
- data/spec/png_suite/background_chunks/bgai4a08.png +0 -0
- data/spec/png_suite/background_chunks/bgai4a16.png +0 -0
- data/spec/png_suite/background_chunks/bgan6a08.png +0 -0
- data/spec/png_suite/background_chunks/bgan6a16.png +0 -0
- data/spec/png_suite/background_chunks/bgbn4a08.png +0 -0
- data/spec/png_suite/background_chunks/bggn4a16.png +0 -0
- data/spec/png_suite/background_chunks/bgwn6a08.png +0 -0
- data/spec/png_suite/background_chunks/bgyn6a16.png +0 -0
- data/spec/png_suite/basic/basi0g01.png +0 -0
- data/spec/png_suite/basic/basi0g01.rgba +0 -0
- data/spec/png_suite/basic/basi0g02.png +0 -0
- data/spec/png_suite/basic/basi0g02.rgba +0 -0
- data/spec/png_suite/basic/basi0g04.png +0 -0
- data/spec/png_suite/basic/basi0g04.rgba +0 -0
- data/spec/png_suite/basic/basi0g08.png +0 -0
- data/spec/png_suite/basic/basi0g08.rgba +0 -0
- data/spec/png_suite/basic/basi0g16.png +0 -0
- data/spec/png_suite/basic/basi0g16.rgba +0 -0
- data/spec/png_suite/basic/basi2c08.png +0 -0
- data/spec/png_suite/basic/basi2c08.rgba +0 -0
- data/spec/png_suite/basic/basi2c16.png +0 -0
- data/spec/png_suite/basic/basi2c16.rgba +0 -0
- data/spec/png_suite/basic/basi3p01.png +0 -0
- data/spec/png_suite/basic/basi3p01.rgba +1 -0
- data/spec/png_suite/basic/basi3p02.png +0 -0
- data/spec/png_suite/basic/basi3p02.rgba +0 -0
- data/spec/png_suite/basic/basi3p04.png +0 -0
- data/spec/png_suite/basic/basi3p04.rgba +0 -0
- data/spec/png_suite/basic/basi3p08.png +0 -0
- data/spec/png_suite/basic/basi3p08.rgba +0 -0
- data/spec/png_suite/basic/basi4a08.png +0 -0
- data/spec/png_suite/basic/basi4a08.rgba +0 -0
- data/spec/png_suite/basic/basi4a16.png +0 -0
- data/spec/png_suite/basic/basi4a16.rgba +0 -0
- data/spec/png_suite/basic/basi6a08.png +0 -0
- data/spec/png_suite/basic/basi6a08.rgba +0 -0
- data/spec/png_suite/basic/basi6a16.png +0 -0
- data/spec/png_suite/basic/basi6a16.rgba +0 -0
- data/spec/png_suite/basic/basn0g01.png +0 -0
- data/spec/png_suite/basic/basn0g01.rgba +0 -0
- data/spec/png_suite/basic/basn0g02.png +0 -0
- data/spec/png_suite/basic/basn0g02.rgba +0 -0
- data/spec/png_suite/basic/basn0g04.png +0 -0
- data/spec/png_suite/basic/basn0g04.rgba +0 -0
- data/spec/png_suite/basic/basn0g08.png +0 -0
- data/spec/png_suite/basic/basn0g08.rgba +0 -0
- data/spec/png_suite/basic/basn0g16.png +0 -0
- data/spec/png_suite/basic/basn0g16.rgba +0 -0
- data/spec/png_suite/basic/basn2c08.png +0 -0
- data/spec/png_suite/basic/basn2c08.rgba +0 -0
- data/spec/png_suite/basic/basn2c16.png +0 -0
- data/spec/png_suite/basic/basn2c16.rgba +0 -0
- data/spec/png_suite/basic/basn3p01.png +0 -0
- data/spec/png_suite/basic/basn3p01.rgba +1 -0
- data/spec/png_suite/basic/basn3p02.png +0 -0
- data/spec/png_suite/basic/basn3p02.rgba +0 -0
- data/spec/{resources/indexed_4bit.png → png_suite/basic/basn3p04.png} +0 -0
- data/spec/png_suite/basic/basn3p04.rgba +0 -0
- data/spec/png_suite/basic/basn3p08.png +0 -0
- data/spec/png_suite/basic/basn3p08.rgba +0 -0
- data/spec/png_suite/basic/basn4a08.png +0 -0
- data/spec/png_suite/basic/basn4a08.rgba +0 -0
- data/spec/png_suite/basic/basn4a16.png +0 -0
- data/spec/png_suite/basic/basn4a16.rgba +0 -0
- data/spec/png_suite/basic/basn6a08.png +0 -0
- data/spec/png_suite/basic/basn6a08.rgba +0 -0
- data/spec/png_suite/basic/basn6a16.png +0 -0
- data/spec/png_suite/basic/basn6a16.rgba +0 -0
- data/spec/png_suite/broken/x00n0g01.png +0 -0
- data/spec/png_suite/broken/xcrn0g04.png +0 -0
- data/spec/png_suite/broken/xlfn0g04.png +13 -0
- data/spec/png_suite/chunk_ordering/oi1n0g16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi1n2c16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi2n0g16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi2n2c16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi4n0g16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi4n2c16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi9n0g16.png +0 -0
- data/spec/png_suite/chunk_ordering/oi9n2c16.png +0 -0
- data/spec/png_suite/compression_levels/z00n2c08.png +0 -0
- data/spec/png_suite/compression_levels/z03n2c08.png +0 -0
- data/spec/png_suite/compression_levels/z06n2c08.png +0 -0
- data/spec/png_suite/compression_levels/z09n2c08.png +0 -0
- data/spec/png_suite/filtering/f00n0g08.png +0 -0
- data/spec/png_suite/filtering/f00n0g08.rgba +0 -0
- data/spec/png_suite/filtering/f00n0g08_reference.png +0 -0
- data/spec/png_suite/filtering/f00n0g08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f00n2c08.png +0 -0
- data/spec/png_suite/filtering/f00n2c08.rgba +0 -0
- data/spec/png_suite/filtering/f00n2c08_reference.png +0 -0
- data/spec/png_suite/filtering/f00n2c08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f01n0g08.png +0 -0
- data/spec/png_suite/filtering/f01n0g08.rgba +0 -0
- data/spec/png_suite/filtering/f01n0g08_reference.png +0 -0
- data/spec/png_suite/filtering/f01n0g08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f01n2c08.png +0 -0
- data/spec/png_suite/filtering/f01n2c08.rgba +0 -0
- data/spec/png_suite/filtering/f01n2c08_reference.png +0 -0
- data/spec/png_suite/filtering/f01n2c08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f02n0g08.png +0 -0
- data/spec/png_suite/filtering/f02n0g08.rgba +0 -0
- data/spec/png_suite/filtering/f02n0g08_reference.png +0 -0
- data/spec/png_suite/filtering/f02n0g08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f02n2c08.png +0 -0
- data/spec/png_suite/filtering/f02n2c08.rgba +0 -0
- data/spec/png_suite/filtering/f02n2c08_reference.png +0 -0
- data/spec/png_suite/filtering/f02n2c08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f03n0g08.png +0 -0
- data/spec/png_suite/filtering/f03n0g08.rgba +0 -0
- data/spec/png_suite/filtering/f03n0g08_reference.png +0 -0
- data/spec/png_suite/filtering/f03n0g08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f03n2c08.png +0 -0
- data/spec/png_suite/filtering/f03n2c08.rgba +0 -0
- data/spec/png_suite/filtering/f03n2c08_reference.png +0 -0
- data/spec/png_suite/filtering/f03n2c08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f04n0g08.png +0 -0
- data/spec/png_suite/filtering/f04n0g08.rgba +0 -0
- data/spec/png_suite/filtering/f04n0g08_reference.png +0 -0
- data/spec/png_suite/filtering/f04n0g08_reference.rgba +0 -0
- data/spec/png_suite/filtering/f04n2c08.png +0 -0
- data/spec/png_suite/filtering/f04n2c08.rgba +0 -0
- data/spec/png_suite/filtering/f04n2c08_reference.png +0 -0
- data/spec/png_suite/filtering/f04n2c08_reference.rgba +0 -0
- data/spec/png_suite/gamma/g03n0g16.png +0 -0
- data/spec/png_suite/gamma/g03n2c08.png +0 -0
- data/spec/png_suite/gamma/g03n3p04.png +0 -0
- data/spec/png_suite/gamma/g04n0g16.png +0 -0
- data/spec/png_suite/gamma/g04n2c08.png +0 -0
- data/spec/png_suite/gamma/g04n3p04.png +0 -0
- data/spec/png_suite/gamma/g05n0g16.png +0 -0
- data/spec/png_suite/gamma/g05n2c08.png +0 -0
- data/spec/png_suite/gamma/g05n3p04.png +0 -0
- data/spec/png_suite/gamma/g07n0g16.png +0 -0
- data/spec/png_suite/gamma/g07n2c08.png +0 -0
- data/spec/png_suite/gamma/g07n3p04.png +0 -0
- data/spec/png_suite/gamma/g10n0g16.png +0 -0
- data/spec/png_suite/gamma/g10n2c08.png +0 -0
- data/spec/png_suite/gamma/g10n3p04.png +0 -0
- data/spec/png_suite/gamma/g25n0g16.png +0 -0
- data/spec/png_suite/gamma/g25n2c08.png +0 -0
- data/spec/png_suite/gamma/g25n3p04.png +0 -0
- data/spec/png_suite/metadata/cm0n0g04.png +0 -0
- data/spec/png_suite/metadata/cm7n0g04.png +0 -0
- data/spec/png_suite/metadata/cm9n0g04.png +0 -0
- data/spec/png_suite/other/ccwn2c08.png +0 -0
- data/spec/png_suite/other/ccwn3p08.png +0 -0
- data/spec/png_suite/other/cdfn2c08.png +0 -0
- data/spec/png_suite/other/cdhn2c08.png +0 -0
- data/spec/png_suite/other/cdsn2c08.png +0 -0
- data/spec/png_suite/other/cdun2c08.png +0 -0
- data/spec/png_suite/other/ch1n3p04.png +0 -0
- data/spec/png_suite/other/ch2n3p08.png +0 -0
- data/spec/png_suite/other/cs3n2c16.png +0 -0
- data/spec/png_suite/other/cs3n3p08.png +0 -0
- data/spec/png_suite/other/cs5n2c08.png +0 -0
- data/spec/png_suite/other/cs5n3p08.png +0 -0
- data/spec/png_suite/other/cs8n2c08.png +0 -0
- data/spec/png_suite/other/cs8n3p08.png +0 -0
- data/spec/png_suite/other/ct0n0g04.png +0 -0
- data/spec/png_suite/other/ct1n0g04.png +0 -0
- data/spec/png_suite/other/ctzn0g04.png +0 -0
- data/spec/png_suite/other/pp0n2c16.png +0 -0
- data/spec/png_suite/other/pp0n6a08.png +0 -0
- data/spec/png_suite/other/ps1n0g08.png +0 -0
- data/spec/png_suite/other/ps1n2c16.png +0 -0
- data/spec/png_suite/other/ps2n0g08.png +0 -0
- data/spec/png_suite/other/ps2n2c16.png +0 -0
- data/spec/png_suite/sizes/s01i3p01.png +0 -0
- data/spec/png_suite/sizes/s01n3p01.png +0 -0
- data/spec/png_suite/sizes/s02i3p01.png +0 -0
- data/spec/png_suite/sizes/s02n3p01.png +0 -0
- data/spec/png_suite/sizes/s03i3p01.png +0 -0
- data/spec/png_suite/sizes/s03n3p01.png +0 -0
- data/spec/png_suite/sizes/s04i3p01.png +0 -0
- data/spec/png_suite/sizes/s04n3p01.png +0 -0
- data/spec/png_suite/sizes/s05i3p02.png +0 -0
- data/spec/png_suite/sizes/s05n3p02.png +0 -0
- data/spec/png_suite/sizes/s06i3p02.png +0 -0
- data/spec/png_suite/sizes/s06n3p02.png +0 -0
- data/spec/png_suite/sizes/s07i3p02.png +0 -0
- data/spec/png_suite/sizes/s07n3p02.png +0 -0
- data/spec/png_suite/sizes/s08i3p02.png +0 -0
- data/spec/png_suite/sizes/s08n3p02.png +0 -0
- data/spec/png_suite/sizes/s09i3p02.png +0 -0
- data/spec/png_suite/sizes/s09n3p02.png +0 -0
- data/spec/png_suite/sizes/s32i3p04.png +0 -0
- data/spec/png_suite/sizes/s32n3p04.png +0 -0
- data/spec/png_suite/sizes/s33i3p04.png +0 -0
- data/spec/png_suite/sizes/s33n3p04.png +0 -0
- data/spec/png_suite/sizes/s34i3p04.png +0 -0
- data/spec/png_suite/sizes/s34n3p04.png +0 -0
- data/spec/png_suite/sizes/s35i3p04.png +0 -0
- data/spec/png_suite/sizes/s35n3p04.png +0 -0
- data/spec/png_suite/sizes/s36i3p04.png +0 -0
- data/spec/png_suite/sizes/s36n3p04.png +0 -0
- data/spec/png_suite/sizes/s37i3p04.png +0 -0
- data/spec/png_suite/sizes/s37n3p04.png +0 -0
- data/spec/png_suite/sizes/s38i3p04.png +0 -0
- data/spec/png_suite/sizes/s38n3p04.png +0 -0
- data/spec/png_suite/sizes/s39i3p04.png +0 -0
- data/spec/png_suite/sizes/s39n3p04.png +0 -0
- data/spec/png_suite/sizes/s40i3p04.png +0 -0
- data/spec/png_suite/sizes/s40n3p04.png +0 -0
- data/spec/png_suite/transparency/tbbn1g04.png +0 -0
- data/spec/png_suite/transparency/tbbn2c16.png +0 -0
- data/spec/png_suite/transparency/tbbn3p08.png +0 -0
- data/spec/png_suite/transparency/tbgn2c16.png +0 -0
- data/spec/png_suite/transparency/tbgn3p08.png +0 -0
- data/spec/png_suite/transparency/tbrn2c08.png +0 -0
- data/spec/png_suite/transparency/tbwn1g16.png +0 -0
- data/spec/png_suite/transparency/tbwn3p08.png +0 -0
- data/spec/png_suite/transparency/tbyn3p08.png +0 -0
- data/spec/png_suite/transparency/tp0n1g08.png +0 -0
- data/spec/png_suite/transparency/tp0n2c08.png +0 -0
- data/spec/png_suite/transparency/tp0n3p08.png +0 -0
- data/spec/png_suite/transparency/tp1n3p08.png +0 -0
- data/spec/png_suite_spec.rb +119 -0
- data/spec/spec_helper.rb +26 -16
- metadata +240 -25
- data/spec/resources/16x16_interlaced.png +0 -0
- data/spec/resources/16x16_non_interlaced.png +0 -0
- data/spec/resources/gray_10x10.png +0 -0
- data/spec/resources/gray_10x10_grayscale.png +0 -0
- data/spec/resources/gray_10x10_grayscale_alpha.png +0 -0
- data/spec/resources/gray_10x10_indexed.png +0 -0
- data/spec/resources/gray_10x10_truecolor.png +0 -0
- data/spec/resources/gray_10x10_truecolor_alpha.png +0 -0
- data/spec/resources/transparent_gray_10x10.png +0 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'PNG testuite' do
|
4
|
+
|
5
|
+
context 'Decoding broken images' do
|
6
|
+
png_suite_files(:broken).each do |file|
|
7
|
+
it "should report #{File.basename(file)} as broken" do
|
8
|
+
lambda { ChunkyPNG::Image.from_file(file) }.should raise_error
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should not report #{File.basename(file)} as unsupported" do
|
12
|
+
lambda { ChunkyPNG::Image.from_file(file) }.should_not raise_error(ChunkyPNG::NotSupported)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
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
|
+
context 'Decoding supported images' do
|
32
|
+
png_suite_files(:basic, '*.png').each do |file|
|
33
|
+
|
34
|
+
reference = file.sub(/\.png$/, '.rgba')
|
35
|
+
color_mode = file.match(/[in](\d)[apgc](\d\d)\.png$/)[1].to_i
|
36
|
+
bit_depth = file.match(/[in](\d)[apgc](\d\d)\.png$/)[2].to_i
|
37
|
+
|
38
|
+
it "should decode #{File.basename(file)} (color mode: #{color_mode}, bit depth: #{bit_depth}) exactly the same as the reference image" do
|
39
|
+
decoded = ChunkyPNG::Canvas.from_file(file)
|
40
|
+
File.open(reference, 'rb:binary') { |f| decoded.to_rgba_stream.should == f.read }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'Decoding text chunks' do
|
46
|
+
|
47
|
+
it "should not find metadata in a file without text chunks" do
|
48
|
+
image = ChunkyPNG::Image.from_file(png_suite_file(:metadata, 'cm0n0g04.png'))
|
49
|
+
image.metadata.should be_empty
|
50
|
+
end
|
51
|
+
|
52
|
+
# it "should find metadata in a file with uncompressed text chunks" do
|
53
|
+
# image = ChunkyPNG::Image.from_file(png_suite_file(:metadata, 'cm7n0g04.png'))
|
54
|
+
# image.metadata.should_not be_empty
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# it "should find metadata in a file with compressed text chunks" do
|
58
|
+
# image = ChunkyPNG::Image.from_file(png_suite_file(:metadata, 'cm9n0g04.png'))
|
59
|
+
# image.metadata.should_not be_empty
|
60
|
+
# end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'Decoding filter methods' do
|
64
|
+
png_suite_files(:filtering, '*_reference.png').each do |reference_file|
|
65
|
+
|
66
|
+
file = reference_file.sub(/_reference\.png$/, '.png')
|
67
|
+
filter_method = file.match(/f(\d\d)[a-z0-9]+\.png/)[1].to_i
|
68
|
+
|
69
|
+
it "should decode #{File.basename(file)} (filter method: #{filter_method}) exactly the same as the reference image" do
|
70
|
+
decoded = ChunkyPNG::Canvas.from_file(file)
|
71
|
+
reference = ChunkyPNG::Canvas.from_file(reference_file)
|
72
|
+
decoded.should == reference
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'Decoding different chunk splits' do
|
78
|
+
it "should decode grayscale images successfully regardless of the data chunk ordering and splitting" do
|
79
|
+
reference = ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi1n0g16.png')).imagedata
|
80
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi2n0g16.png')).imagedata.should == reference
|
81
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi4n0g16.png')).imagedata.should == reference
|
82
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi9n0g16.png')).imagedata.should == reference
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should decode color images successfully regardless of the data chunk ordering and splitting" do
|
86
|
+
reference = ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi1n2c16.png')).imagedata
|
87
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi2n2c16.png')).imagedata.should == reference
|
88
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi4n2c16.png')).imagedata.should == reference
|
89
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:chunk_ordering, 'oi9n2c16.png')).imagedata.should == reference
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'Decoding different compression levels' do
|
94
|
+
it "should decode the image successfully regardless of the compression level" do
|
95
|
+
reference = ChunkyPNG::Datastream.from_file(png_suite_file(:compression_levels, 'z00n2c08.png')).imagedata
|
96
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:compression_levels, 'z03n2c08.png')).imagedata.should == reference
|
97
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:compression_levels, 'z06n2c08.png')).imagedata.should == reference
|
98
|
+
ChunkyPNG::Datastream.from_file(png_suite_file(:compression_levels, 'z09n2c08.png')).imagedata.should == reference
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'Decoding different sizes' do
|
103
|
+
|
104
|
+
png_suite_files(:sizes, '*n*.png').each do |file|
|
105
|
+
dimension = file.match(/s(\d\d)n\dp\d\d/)[1].to_i
|
106
|
+
|
107
|
+
it "should create a canvas with a #{dimension}x#{dimension} size" do
|
108
|
+
canvas = ChunkyPNG::Image.from_file(file)
|
109
|
+
canvas.width.should == dimension
|
110
|
+
canvas.height.should == dimension
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should decode the #{dimension}x#{dimension} interlaced image exactly the same the non-interlaced version" do
|
114
|
+
interlaced_file = file.sub(/n3p(\d\d)\.png$/, 'i3p\\1.png')
|
115
|
+
ChunkyPNG::Image.from_file(interlaced_file).should == ChunkyPNG::Image.from_file(file)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'bundler'
|
5
3
|
|
6
|
-
Bundler.
|
7
|
-
|
8
|
-
require 'rspec'
|
9
|
-
require 'chunky_png'
|
4
|
+
Bundler.require(:default, :development)
|
10
5
|
|
11
|
-
module
|
12
|
-
|
13
|
-
|
6
|
+
module PNGSuite
|
7
|
+
|
8
|
+
def png_suite_file(kind, file)
|
9
|
+
File.join(png_suite_dir(kind), file)
|
10
|
+
end
|
11
|
+
|
12
|
+
def png_suite_dir(kind)
|
13
|
+
File.expand_path("./png_suite/#{kind}", File.dirname(__FILE__))
|
14
|
+
end
|
15
|
+
|
16
|
+
def png_suite_files(kind, pattern = '*.png')
|
17
|
+
Dir[File.join(png_suite_dir(kind), pattern)]
|
14
18
|
end
|
15
19
|
end
|
16
20
|
|
17
21
|
|
18
|
-
module
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
22
|
+
module ResourceFileHelper
|
23
|
+
|
24
|
+
def resource_file(name)
|
25
|
+
File.expand_path("./resources/#{name}", File.dirname(__FILE__))
|
26
|
+
end
|
24
27
|
|
25
28
|
def reference_canvas(name)
|
26
29
|
ChunkyPNG::Canvas.from_file(resource_file("#{name}.png"))
|
@@ -29,9 +32,16 @@ module MatrixSpecHelper
|
|
29
32
|
def reference_image(name)
|
30
33
|
ChunkyPNG::Image.from_file(resource_file("#{name}.png"))
|
31
34
|
end
|
35
|
+
|
36
|
+
def display(canvas)
|
37
|
+
filename = resource_file('_tmp.png')
|
38
|
+
canvas.to_datastream.save(filename)
|
39
|
+
`open #{filename}`
|
40
|
+
end
|
32
41
|
end
|
33
42
|
|
34
43
|
RSpec.configure do |config|
|
44
|
+
config.extend PNGSuite
|
45
|
+
config.include PNGSuite
|
35
46
|
config.include ResourceFileHelper
|
36
|
-
config.include MatrixSpecHelper
|
37
47
|
end
|