pngqr 0.3 → 0.4

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.
Files changed (5) hide show
  1. data/CHANGELOG +2 -0
  2. data/README +8 -1
  3. data/lib/pngqr.rb +23 -5
  4. data/pngqr.gemspec +3 -4
  5. metadata +4 -16
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.4. Auto-sizing output, border support
2
+
1
3
  v0.3. fix default scale=1.0 bug
2
4
 
3
5
  v0.2. Add output file and scaling support
data/README CHANGED
@@ -16,12 +16,17 @@ Example:
16
16
  Pngqr.encode 'https://github.com/andys', :file => 'output.png'
17
17
 
18
18
  The parameters for encode() are the same as the rqrcode gem's new(), except:
19
+
19
20
  1. we add :file if you want to output to a file instead of returning the PNG as
20
21
  a blob, and
22
+
21
23
  2. you can :scale with an integer parameter and it will scale up the output
22
24
  image by that many times.
23
- See: http://whomwah.github.com/rqrcode/
24
25
 
26
+ 3. if you don't supply a :size, we auto-size by testing each size until we
27
+ find the one that worked. It seems quick enough.
28
+
29
+ 4. :border=>n lets you add an n pixel white border to the PNG
25
30
 
26
31
 
27
32
  Dependencies
@@ -29,6 +34,8 @@ Dependencies
29
34
 
30
35
  Gems: rqrcode and chunky_png (both pure ruby gems)
31
36
 
37
+ See: http://whomwah.github.com/rqrcode/
38
+
32
39
 
33
40
 
34
41
 
data/lib/pngqr.rb CHANGED
@@ -6,20 +6,38 @@ class Pngqr
6
6
  class << self
7
7
 
8
8
  def encode(*opts)
9
+ opthash = {}
9
10
  if Hash===opts.last
10
- @filename = opts.last.delete(:file)
11
- @scale = opts.last.delete(:scale)
11
+ opthash = opts.pop
12
+ @filename = opthash.delete(:file)
13
+ @scale = opthash.delete(:scale)
14
+ @border = opthash.delete(:border)
12
15
  end
13
16
  @scale ||= 1
17
+ @border ||= 0
14
18
 
15
- qr = RQRCode::QRCode.new(*opts)
19
+ qr = nil
20
+ if(opthash[:size]) # user supplied size
21
+ qr = RQRCode::QRCode.new(*opts, opthash)
22
+ else
23
+ # autosize algorithm: start at size=1 and increment until it worked
24
+ opthash[:size] = 1
25
+ while qr.nil?
26
+ qr = begin
27
+ RQRCode::QRCode.new(*opts, opthash)
28
+ rescue RQRCode::QRCodeRunTimeError => e
29
+ opthash[:size] += 1
30
+ raise unless e.to_s =~ /overflow/ && opthash[:size] <= 40
31
+ end
32
+ end
33
+ end
16
34
  len = qr.module_count
17
- png = ChunkyPNG::Image.new(len*@scale, len*@scale, ChunkyPNG::Color::WHITE)
35
+ png = ChunkyPNG::Image.new(len*@scale + 2*@border, len*@scale + 2*@border, ChunkyPNG::Color::WHITE)
18
36
 
19
37
  for_each_pixel(len) do |x,y|
20
38
  if qr.modules[y][x]
21
39
  for_each_scale(x, y, @scale) do |scaled_x, scaled_y|
22
- png[scaled_x, scaled_y] = ChunkyPNG::Color::BLACK
40
+ png[scaled_x + @border, scaled_y + @border] = ChunkyPNG::Color::BLACK
23
41
  end
24
42
  end
25
43
  end
data/pngqr.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{pngqr}
5
- s.version = "0.3"
5
+ s.version = "0.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Andrew Snow"]
9
- s.date = %q{2011-03-08}
9
+ s.date = %q{2011-03-17}
10
10
  s.description = %q{Ruby Gem to generate PNG files with QR codes in them}
11
11
  s.email = %q{andrew@modulus.org}
12
12
  s.extra_rdoc_files = ["CHANGELOG", "README", "lib/pngqr.rb"]
@@ -15,11 +15,10 @@ Gem::Specification.new do |s|
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Pngqr", "--main", "README"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{pngqr}
18
- s.rubygems_version = %q{1.3.7}
18
+ s.rubygems_version = %q{1.6.2}
19
19
  s.summary = %q{Ruby Gem to generate PNG files with QR codes in them}
20
20
 
21
21
  if s.respond_to? :specification_version then
22
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
22
  s.specification_version = 3
24
23
 
25
24
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,11 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pngqr
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- version: "0.3"
4
+ prerelease:
5
+ version: "0.4"
9
6
  platform: ruby
10
7
  authors:
11
8
  - Andrew Snow
@@ -13,7 +10,7 @@ autorequire:
13
10
  bindir: bin
14
11
  cert_chain: []
15
12
 
16
- date: 2011-03-08 00:00:00 +11:00
13
+ date: 2011-03-17 00:00:00 +11:00
17
14
  default_executable:
18
15
  dependencies:
19
16
  - !ruby/object:Gem::Dependency
@@ -24,8 +21,6 @@ dependencies:
24
21
  requirements:
25
22
  - - ">="
26
23
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
24
  version: "0"
30
25
  type: :runtime
31
26
  version_requirements: *id001
@@ -37,8 +32,6 @@ dependencies:
37
32
  requirements:
38
33
  - - ">="
39
34
  - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
35
  version: "0"
43
36
  type: :runtime
44
37
  version_requirements: *id002
@@ -78,22 +71,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
71
  requirements:
79
72
  - - ">="
80
73
  - !ruby/object:Gem::Version
81
- segments:
82
- - 0
83
74
  version: "0"
84
75
  required_rubygems_version: !ruby/object:Gem::Requirement
85
76
  none: false
86
77
  requirements:
87
78
  - - ">="
88
79
  - !ruby/object:Gem::Version
89
- segments:
90
- - 1
91
- - 2
92
80
  version: "1.2"
93
81
  requirements: []
94
82
 
95
83
  rubyforge_project: pngqr
96
- rubygems_version: 1.3.7
84
+ rubygems_version: 1.6.2
97
85
  signing_key:
98
86
  specification_version: 3
99
87
  summary: Ruby Gem to generate PNG files with QR codes in them