zpng 0.0.2 → 0.1.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 +3 -4
- data/Gemfile.lock +18 -16
- data/README.md +62 -48
- data/README.md.tpl +11 -1
- data/Rakefile +43 -0
- data/VERSION +1 -1
- data/lib/zpng/chunk.rb +114 -17
- data/lib/zpng/cli.rb +30 -5
- data/lib/zpng/color.rb +30 -0
- data/lib/zpng/image.rb +122 -19
- data/lib/zpng/scan_line.rb +138 -74
- data/samples/captcha_4bpp.png +0 -0
- data/spec/create_image_spec.rb +78 -0
- data/spec/crop_spec.rb +93 -0
- data/spec/image_spec.rb +54 -0
- data/spec/modify_spec.rb +2 -9
- data/spec/running_pixel_spec.rb +47 -0
- data/spec/spec_helper.rb +7 -1
- data/zpng.gemspec +17 -15
- metadata +57 -38
Binary file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
include ZPNG
|
4
|
+
|
5
|
+
describe Image do
|
6
|
+
def _new_img bpp, color
|
7
|
+
Image.new(:width => 8, :height => 8, :bpp => bpp, :color => color)
|
8
|
+
end
|
9
|
+
|
10
|
+
[1,2,4,8].each do |bpp|
|
11
|
+
[true, false].each do |color|
|
12
|
+
describe "new( :bpp => #{bpp}, :color => #{color} )" do
|
13
|
+
subject(:img){ _new_img(bpp,color) }
|
14
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
15
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
16
|
+
|
17
|
+
subject{ img.hdr }
|
18
|
+
its(:depth) { should == bpp }
|
19
|
+
its(:color) { should == (color ? COLOR_INDEXED : COLOR_GRAYSCALE) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "new( :bpp => 16, :color => false )" do
|
25
|
+
subject(:img){ _new_img(16,false) }
|
26
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
27
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
28
|
+
|
29
|
+
subject{ img.hdr }
|
30
|
+
its(:depth) { should == 8 } # 8 bits per color + 8 per alpha = 16 bpp
|
31
|
+
its(:color) { should == COLOR_GRAY_ALPHA }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "new( :bpp => 16, :color => true )" do
|
35
|
+
subject{ lambda{ _new_img(16,true) } }
|
36
|
+
it { should raise_exception }
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "new( :bpp => 24, :color => false )" do
|
40
|
+
subject(:img){ _new_img(24,false) }
|
41
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
42
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
43
|
+
|
44
|
+
subject{ img.hdr }
|
45
|
+
its(:depth) { should == 8 } # each channel depth = 8
|
46
|
+
its(:color) { should == COLOR_RGB }
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "new( :bpp => 24, :color => true )" do
|
50
|
+
subject(:img){ _new_img(24,true) }
|
51
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
52
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
53
|
+
|
54
|
+
subject{ img.hdr }
|
55
|
+
its(:depth) { should == 8 } # each channel depth = 8
|
56
|
+
its(:color) { should == COLOR_RGB }
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "new( :bpp => 32, :color => false )" do
|
60
|
+
subject(:img){ _new_img(32,false) }
|
61
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
62
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
63
|
+
|
64
|
+
subject{ img.hdr }
|
65
|
+
its(:depth) { should == 8 } # each channel depth = 8
|
66
|
+
its(:color) { should == COLOR_RGBA }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "new( :bpp => 32, :color => true )" do
|
70
|
+
subject(:img){ _new_img(32,true) }
|
71
|
+
it("should export"){ img.export.should start_with(Image::PNG_HDR) }
|
72
|
+
it("should to_s") { img.to_s.strip.split("\n").size.should == 8 }
|
73
|
+
|
74
|
+
subject{ img.hdr }
|
75
|
+
its(:depth) { should == 8 } # each channel depth = 8
|
76
|
+
its(:color) { should == COLOR_RGBA }
|
77
|
+
end
|
78
|
+
end
|
data/spec/crop_spec.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
CROP_WIDTH = 10
|
4
|
+
CROP_HEIGHT = 10
|
5
|
+
CROP_SAMPLE = File.join(SAMPLES_DIR, "captcha_4bpp.png")
|
6
|
+
|
7
|
+
QR_SQUARE = <<EOF
|
8
|
+
#######
|
9
|
+
#.....#
|
10
|
+
#.###.#
|
11
|
+
#.###.#
|
12
|
+
#.###.#
|
13
|
+
#.....#
|
14
|
+
#######
|
15
|
+
EOF
|
16
|
+
|
17
|
+
include ZPNG
|
18
|
+
|
19
|
+
describe Image do
|
20
|
+
describe "crop" do
|
21
|
+
it "crops and keeps original image unchanged" do
|
22
|
+
src1 = Image.load(CROP_SAMPLE)
|
23
|
+
src2 = Image.load(CROP_SAMPLE)
|
24
|
+
dest = src1.crop :width => CROP_WIDTH, :height => CROP_HEIGHT
|
25
|
+
|
26
|
+
dest.width.should == CROP_WIDTH
|
27
|
+
dest.height.should == CROP_HEIGHT
|
28
|
+
|
29
|
+
dest.width.should_not == src1.width
|
30
|
+
dest.height.should_not == src1.height
|
31
|
+
|
32
|
+
src1.export.should == src2.export
|
33
|
+
src1.export.should_not == dest.export
|
34
|
+
src2.export.should_not == dest.export
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "crop! result" do
|
39
|
+
let!(:img){
|
40
|
+
Image.load(CROP_SAMPLE).crop! :width => CROP_WIDTH, :height => CROP_HEIGHT
|
41
|
+
}
|
42
|
+
it "has #{CROP_HEIGHT} scanlines" do
|
43
|
+
img.scanlines.size.should == CROP_HEIGHT
|
44
|
+
end
|
45
|
+
|
46
|
+
CROP_HEIGHT.times do |i|
|
47
|
+
it "calculates proper #size" do
|
48
|
+
scanline_size = (img.hdr.bpp*img.width/8).ceil + 1
|
49
|
+
img.scanlines[i].size.should == scanline_size
|
50
|
+
end
|
51
|
+
it "exports proper count of bytes" do
|
52
|
+
scanline_size = (img.hdr.bpp*img.width/8).ceil + 1
|
53
|
+
img.scanlines[i].export.size.should == scanline_size
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "reimported" do
|
58
|
+
let!(:img2){ Image.new(img.export) }
|
59
|
+
|
60
|
+
it "has #{CROP_HEIGHT} scanlines" do
|
61
|
+
img2.scanlines.size.should == CROP_HEIGHT
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
SAMPLES.find_all{ |fname| fname['qr_'] }.each do |fname|
|
67
|
+
describe fname do
|
68
|
+
let!(:img){ Image.load fname }
|
69
|
+
|
70
|
+
it "should extract left square" do
|
71
|
+
img.crop! :x => 1, :y => 1, :width => 7, :height => 7
|
72
|
+
img.to_s(:white => '.', :black => '#').strip.should == QR_SQUARE.strip
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should extract right square" do
|
76
|
+
img.crop! :x => 27, :y => 1, :width => 7, :height => 7
|
77
|
+
img.to_s(:white => '.', :black => '#').strip.should == QR_SQUARE.strip
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should extract bottom square" do
|
81
|
+
img.crop! :x => 1, :y => 27, :width => 7, :height => 7
|
82
|
+
img.to_s(:white => '.', :black => '#').strip.should == QR_SQUARE.strip
|
83
|
+
end
|
84
|
+
|
85
|
+
it "keeps whole original image if crop is larger than image" do
|
86
|
+
img2 = img.crop :x => 0, :y => 0, :width => 7000, :height => 7000
|
87
|
+
img2.width.should == img.width
|
88
|
+
img2.height.should == img.height
|
89
|
+
img2.to_s.should == img.to_s
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/spec/image_spec.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
NEW_IMG_WIDTH = 20
|
4
|
+
NEW_IMG_HEIGHT = 10
|
5
|
+
|
6
|
+
describe ZPNG::Image do
|
7
|
+
describe "new" do
|
8
|
+
let!(:img){ ZPNG::Image.new :width => NEW_IMG_WIDTH, :height => NEW_IMG_HEIGHT }
|
9
|
+
|
10
|
+
it "returns ZPNG::Image" do
|
11
|
+
img.should be_instance_of(ZPNG::Image)
|
12
|
+
end
|
13
|
+
it "creates new image of specified size" do
|
14
|
+
img.width.should == NEW_IMG_WIDTH
|
15
|
+
img.height.should == NEW_IMG_HEIGHT
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "exported image" do
|
19
|
+
let!(:eimg){ img.export }
|
20
|
+
it "has PNG header" do
|
21
|
+
eimg.should start_with(ZPNG::Image::PNG_HDR)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "parsed again" do
|
25
|
+
let!(:img2){ ZPNG::Image.new(eimg) }
|
26
|
+
|
27
|
+
it "is a ZPNG::Image" do
|
28
|
+
img2.should be_instance_of(ZPNG::Image)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be of specified size" do
|
32
|
+
img2.width.should == NEW_IMG_WIDTH
|
33
|
+
img2.height.should == NEW_IMG_HEIGHT
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have bpp = 32" do
|
37
|
+
img2.hdr.bpp.should == 32
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should have 3 chunks: IHDR, IDAT, IEND" do
|
41
|
+
img2.chunks.map(&:type).should == %w'IHDR IDAT IEND'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should have all pixels transparent" do
|
45
|
+
NEW_IMG_HEIGHT.times do |y|
|
46
|
+
NEW_IMG_WIDTH.times do |x|
|
47
|
+
img2[x,y].should be_transparent
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/modify_spec.rb
CHANGED
@@ -38,18 +38,11 @@ ASCII_MODIFIED_QR = <<EOF
|
|
38
38
|
...................................
|
39
39
|
EOF
|
40
40
|
|
41
|
-
samples =
|
42
|
-
if ENV['SAMPLES']
|
43
|
-
ENV['SAMPLES'].split(' ')
|
44
|
-
else
|
45
|
-
Dir[File.join(SAMPLES_DIR,'qr_*.png')]
|
46
|
-
end
|
47
|
-
|
48
41
|
describe "ZPNG modify" do
|
49
42
|
it "should have QR examples" do
|
50
|
-
|
43
|
+
SAMPLES.should_not be_empty
|
51
44
|
end
|
52
|
-
|
45
|
+
SAMPLES.each do |fname|
|
53
46
|
describe fname.sub(File.dirname(SAMPLES_DIR)+'/','') do
|
54
47
|
img = ZPNG::Image.new(fname)
|
55
48
|
it "modifies img - color=#{img.hdr.color}, depth=#{img.hdr.depth}, bpp=#{img.hdr.bpp}" do
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
include ZPNG
|
3
|
+
|
4
|
+
describe Image do
|
5
|
+
def _new_img bpp, color
|
6
|
+
Image.new(:width => 16, :height => 1, :bpp => bpp, :color => color)
|
7
|
+
end
|
8
|
+
|
9
|
+
# before :all do
|
10
|
+
# $html = "<style>img {width:64px}</style>\n<div style='background-color:#ccc'>\n"
|
11
|
+
# end
|
12
|
+
|
13
|
+
[1,2,4,8,16,24,32].each do |bpp|
|
14
|
+
[true, false].each do |color|
|
15
|
+
next if bpp == 16 && color
|
16
|
+
describe "new( :bpp => #{bpp}, :color => #{color} )" do
|
17
|
+
16.times do |x|
|
18
|
+
it "should set pixel at pos #{x}" do
|
19
|
+
bg = Color::BLACK
|
20
|
+
fg = Color::WHITE
|
21
|
+
|
22
|
+
img = _new_img bpp, color
|
23
|
+
if img.palette
|
24
|
+
img.palette << bg if img.palette
|
25
|
+
else
|
26
|
+
img.width.times{ |i| img[i,0] = bg }
|
27
|
+
end
|
28
|
+
img[x,0] = fg
|
29
|
+
|
30
|
+
s = '#'*16
|
31
|
+
s[x] = ' '
|
32
|
+
img.to_s.should == s
|
33
|
+
|
34
|
+
# fname = "out-#{x}-#{bpp}-#{color}.png"
|
35
|
+
# img.save fname
|
36
|
+
# $html << "<img src='#{fname}'><br/>\n"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# after :all do
|
44
|
+
# $html << "</div>"
|
45
|
+
# File.open("index.html","w"){ |f| f<<$html }
|
46
|
+
# end
|
47
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,7 +8,6 @@ require 'zpng'
|
|
8
8
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
9
|
|
10
10
|
RSpec.configure do |config|
|
11
|
-
|
12
11
|
end
|
13
12
|
|
14
13
|
SAMPLES_DIR = File.join(
|
@@ -16,3 +15,10 @@ SAMPLES_DIR = File.join(
|
|
16
15
|
File.dirname(
|
17
16
|
File.expand_path(__FILE__))),
|
18
17
|
"samples")
|
18
|
+
|
19
|
+
SAMPLES =
|
20
|
+
if ENV['SAMPLES']
|
21
|
+
ENV['SAMPLES'].split(' ')
|
22
|
+
else
|
23
|
+
Dir[File.join(SAMPLES_DIR,'qr_*.png')]
|
24
|
+
end
|
data/zpng.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "zpng"
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrey \"Zed\" Zaikin"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-12-10"
|
13
13
|
s.email = "zed.0xff@gmail.com"
|
14
14
|
s.executables = ["zpng"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
"lib/zpng/color.rb",
|
36
36
|
"lib/zpng/image.rb",
|
37
37
|
"lib/zpng/scan_line.rb",
|
38
|
+
"samples/captcha_4bpp.png",
|
38
39
|
"samples/modify.rb",
|
39
40
|
"samples/qr_aux_chunks.png",
|
40
41
|
"samples/qr_bw.png",
|
@@ -45,7 +46,11 @@ Gem::Specification.new do |s|
|
|
45
46
|
"samples/qr_rgb.png",
|
46
47
|
"samples/qr_rgba.png",
|
47
48
|
"spec/ascii_spec.rb",
|
49
|
+
"spec/create_image_spec.rb",
|
50
|
+
"spec/crop_spec.rb",
|
51
|
+
"spec/image_spec.rb",
|
48
52
|
"spec/modify_spec.rb",
|
53
|
+
"spec/running_pixel_spec.rb",
|
49
54
|
"spec/spec_helper.rb",
|
50
55
|
"spec/zpng_spec.rb",
|
51
56
|
"zpng.gemspec"
|
@@ -53,7 +58,7 @@ Gem::Specification.new do |s|
|
|
53
58
|
s.homepage = "http://github.com/zed-0xff/zpng"
|
54
59
|
s.licenses = ["MIT"]
|
55
60
|
s.require_paths = ["lib"]
|
56
|
-
s.rubygems_version = "1.8.
|
61
|
+
s.rubygems_version = "1.8.24"
|
57
62
|
s.summary = "pure ruby PNG file manipulation & validation"
|
58
63
|
|
59
64
|
if s.respond_to? :specification_version then
|
@@ -62,25 +67,22 @@ Gem::Specification.new do |s|
|
|
62
67
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
63
68
|
s.add_runtime_dependency(%q<colorize>, [">= 0"])
|
64
69
|
s.add_runtime_dependency(%q<hexdump>, [">= 0"])
|
65
|
-
s.add_development_dependency(%q<rspec>, ["
|
66
|
-
s.add_development_dependency(%q<bundler>, ["
|
67
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.
|
68
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
70
|
+
s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
|
71
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
72
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
69
73
|
else
|
70
74
|
s.add_dependency(%q<colorize>, [">= 0"])
|
71
75
|
s.add_dependency(%q<hexdump>, [">= 0"])
|
72
|
-
s.add_dependency(%q<rspec>, ["
|
73
|
-
s.add_dependency(%q<bundler>, ["
|
74
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
75
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
76
|
+
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
77
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
78
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
76
79
|
end
|
77
80
|
else
|
78
81
|
s.add_dependency(%q<colorize>, [">= 0"])
|
79
82
|
s.add_dependency(%q<hexdump>, [">= 0"])
|
80
|
-
s.add_dependency(%q<rspec>, ["
|
81
|
-
s.add_dependency(%q<bundler>, ["
|
82
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
83
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
83
|
+
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
84
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
85
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
metadata
CHANGED
@@ -1,82 +1,96 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zpng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2
|
5
4
|
prerelease:
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrey "Zed" Zaikin
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
prerelease: false
|
16
|
+
type: :runtime
|
15
17
|
name: colorize
|
16
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
17
23
|
none: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
25
|
requirements:
|
19
26
|
- - ! '>='
|
20
27
|
- !ruby/object:Gem::Version
|
21
28
|
version: '0'
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: *70231152732120
|
29
|
+
none: false
|
25
30
|
- !ruby/object:Gem::Dependency
|
31
|
+
prerelease: false
|
32
|
+
type: :runtime
|
26
33
|
name: hexdump
|
27
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
28
39
|
none: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
41
|
requirements:
|
30
42
|
- - ! '>='
|
31
43
|
- !ruby/object:Gem::Version
|
32
44
|
version: '0'
|
33
|
-
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70231152731280
|
45
|
+
none: false
|
36
46
|
- !ruby/object:Gem::Dependency
|
47
|
+
prerelease: false
|
48
|
+
type: :development
|
37
49
|
name: rspec
|
38
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.8.0
|
39
55
|
none: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
57
|
requirements:
|
41
|
-
- -
|
58
|
+
- - ! '>='
|
42
59
|
- !ruby/object:Gem::Version
|
43
60
|
version: 2.8.0
|
44
|
-
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *70231152746560
|
61
|
+
none: false
|
47
62
|
- !ruby/object:Gem::Dependency
|
63
|
+
prerelease: false
|
64
|
+
type: :development
|
48
65
|
name: bundler
|
49
|
-
requirement:
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.0.0
|
50
71
|
none: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
73
|
requirements:
|
52
|
-
- -
|
74
|
+
- - ! '>='
|
53
75
|
- !ruby/object:Gem::Version
|
54
76
|
version: 1.0.0
|
55
|
-
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *70231152745500
|
77
|
+
none: false
|
58
78
|
- !ruby/object:Gem::Dependency
|
79
|
+
prerelease: false
|
80
|
+
type: :development
|
59
81
|
name: jeweler
|
60
|
-
requirement:
|
61
|
-
none: false
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
62
83
|
requirements:
|
63
84
|
- - ~>
|
64
85
|
- !ruby/object:Gem::Version
|
65
|
-
version: 1.
|
66
|
-
type: :development
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: *70231152744400
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rcov
|
71
|
-
requirement: &70231152742060 !ruby/object:Gem::Requirement
|
86
|
+
version: 1.8.4
|
72
87
|
none: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
89
|
requirements:
|
74
|
-
- -
|
90
|
+
- - ~>
|
75
91
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
77
|
-
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: *70231152742060
|
92
|
+
version: 1.8.4
|
93
|
+
none: false
|
80
94
|
description:
|
81
95
|
email: zed.0xff@gmail.com
|
82
96
|
executables:
|
@@ -104,6 +118,7 @@ files:
|
|
104
118
|
- lib/zpng/color.rb
|
105
119
|
- lib/zpng/image.rb
|
106
120
|
- lib/zpng/scan_line.rb
|
121
|
+
- samples/captcha_4bpp.png
|
107
122
|
- samples/modify.rb
|
108
123
|
- samples/qr_aux_chunks.png
|
109
124
|
- samples/qr_bw.png
|
@@ -114,7 +129,11 @@ files:
|
|
114
129
|
- samples/qr_rgb.png
|
115
130
|
- samples/qr_rgba.png
|
116
131
|
- spec/ascii_spec.rb
|
132
|
+
- spec/create_image_spec.rb
|
133
|
+
- spec/crop_spec.rb
|
134
|
+
- spec/image_spec.rb
|
117
135
|
- spec/modify_spec.rb
|
136
|
+
- spec/running_pixel_spec.rb
|
118
137
|
- spec/spec_helper.rb
|
119
138
|
- spec/zpng_spec.rb
|
120
139
|
- zpng.gemspec
|
@@ -126,23 +145,23 @@ rdoc_options: []
|
|
126
145
|
require_paths:
|
127
146
|
- lib
|
128
147
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
148
|
requirements:
|
131
149
|
- - ! '>='
|
132
150
|
- !ruby/object:Gem::Version
|
133
151
|
version: '0'
|
134
152
|
segments:
|
135
153
|
- 0
|
136
|
-
hash: -
|
137
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
hash: -488684070557161038
|
138
155
|
none: false
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
157
|
requirements:
|
140
158
|
- - ! '>='
|
141
159
|
- !ruby/object:Gem::Version
|
142
160
|
version: '0'
|
161
|
+
none: false
|
143
162
|
requirements: []
|
144
163
|
rubyforge_project:
|
145
|
-
rubygems_version: 1.8.
|
164
|
+
rubygems_version: 1.8.24
|
146
165
|
signing_key:
|
147
166
|
specification_version: 3
|
148
167
|
summary: pure ruby PNG file manipulation & validation
|