rqrencoder-magick 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ *.swp
5
+ Gemfile.lock
6
+ tmp/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rqrencoder-magick.gemspec
4
+ gemspec
@@ -0,0 +1,32 @@
1
+ # RQREncoder-Magick
2
+
3
+ ## An image file generator for QRCodes using RMagick
4
+
5
+ ## Install
6
+
7
+ Install with Rubygems:
8
+
9
+ gem install rqrencoder-magick
10
+
11
+ ## Usage
12
+
13
+ Create a QRCode using the (required) rqrencoder gem (http://github.com/mattyr/rqrencoder)
14
+
15
+ This gem extends the QRCode class to have "draw" and "save" functions
16
+
17
+ >> require 'rqrencoder-magick'
18
+ => true
19
+ >> encoder = RQREncoder::QREncoder.new
20
+ => #<RQREncoder::QREncoder>
21
+ >> qrcode = encoder.encode("HELLO")
22
+ => #<RQREncoder::QRCode:0x0000010203b7b0>
23
+ >> qrcode.save("myqrcode.gif")
24
+ => myqrcodegif 290x290 PseudoClass 2c 16-bit
25
+
26
+ ## Notes
27
+
28
+ I had difficulties with the output of RMagick (ImageMagick)'s svg format, so there are two additional "special" functions, draw_svg and save_svg as workarounds.
29
+
30
+ ## Author
31
+
32
+ Matt Robinson
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,5 @@
1
+ module RQREncoder
2
+ module Magick
3
+ require 'rqrencoder-magick/qrcode_ext'
4
+ end
5
+ end
@@ -0,0 +1,70 @@
1
+ require 'rqrencoder'
2
+ require 'rvg/rvg'
3
+ require 'erb'
4
+ include Magick
5
+
6
+ module RQREncoder
7
+ class QRCode
8
+
9
+ @@default_render_options = {:module_pixels => 10, :margin => 4, :fill_color => 'black', :background_color => 'white'}
10
+
11
+ def draw(render_options = {})
12
+ render_rvg(@@default_render_options.merge(render_options)).draw
13
+ end
14
+
15
+ def save(filename, render_options = {})
16
+ draw(render_options).write(filename)
17
+ end
18
+
19
+ # imagemagick's svg output is messed up
20
+ def draw_svg(render_options = {})
21
+ render_svg(@@default_render_options.merge(render_options))
22
+ end
23
+
24
+ def save_svg(filename, render_options = {})
25
+ file = File.new(filename, "w")
26
+ file.puts(draw_svg(render_options))
27
+ file.close
28
+ end
29
+
30
+ private
31
+ def render_rvg(options)
32
+ pp_module = options[:module_pixels]
33
+ margin = options[:margin]
34
+ pixel_size = (size + (margin * 2)) * pp_module
35
+ grid_size = size + (margin * 2)
36
+
37
+ RVG.new(pixel_size, pixel_size).viewbox(0, 0, grid_size, grid_size) do |canvas|
38
+ canvas.background_fill = options[:background_color]
39
+ modules.each_index do |row_index|
40
+ modules[row_index].each_with_index do |val, col_index|
41
+ canvas.rect(1, 1, col_index + margin, row_index + margin).styles(:fill => options[:fill_color]) if val
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ def render_svg(options)
48
+ margin = options[:margin]
49
+ pp_module = options[:module_pixels]
50
+ overall_size = (size + (margin * 2)) * pp_module
51
+
52
+ ERB.new(svg_template, nil, "%<>").result(binding)
53
+ end
54
+
55
+ def svg_template
56
+ %q{<?xml version="1.0" standalone="yes"?>
57
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" width="<%= overall_size %>" height="<%= overall_size %>">
58
+ <rect style="fill:<%= options[:background_color] %>; stroke:none;" x="0" y="0" width="<%= overall_size %>" height="<%= overall_size %>" />
59
+ % modules.each_index do |row_index|
60
+ % modules[row_index].each_with_index do |val, col_index|
61
+ % if val
62
+ <rect style="fill:<%= options[:fill_color] %>; stroke:none;" x="<%= pp_module * (col_index + margin) %>" y="<%= pp_module * (row_index + margin) %>" width="<%= pp_module %>" height="<%= pp_module %>" />
63
+ % end
64
+ % end
65
+ % end
66
+ </svg>
67
+ }.gsub(/^ /, '')
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,5 @@
1
+ module RQREncoder
2
+ module Magick
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rqrencoder-magick/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rqrencoder-magick"
7
+ s.version = RQREncoder::Magick::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Matt Robinson"]
10
+ s.email = ["robinson.matty@gmail.com"]
11
+ s.homepage = "http://github.com/mattyr/rqrencoder-magick"
12
+ s.summary = %q{An image file generator for QRCodes using RMagick}
13
+ s.description = %q{An image file generator for QRCodes using RMagick}
14
+
15
+ s.rubyforge_project = "rqrencoder-magick"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency('rqrencoder', '>= 0.1.2')
23
+ s.add_dependency('rmagick', '>= 2.13.1')
24
+ end
@@ -0,0 +1,40 @@
1
+ require 'test/unit'
2
+ require 'fileutils'
3
+ require 'rqrencoder'
4
+ require 'rqrencoder-magick'
5
+
6
+ class TestGenerator < Test::Unit::TestCase
7
+ def setup
8
+ FileUtils.mkdir_p("tmp")
9
+ end
10
+
11
+ def test_default_save
12
+ simple_save_test("tmp/test1.png")
13
+ end
14
+
15
+ def test_save_pdf
16
+ simple_save_test("tmp/test2.pdf")
17
+ end
18
+
19
+ def test_save_svg
20
+ filename = "tmp/test3.svg"
21
+ File.delete(filename) if File.exists?(filename)
22
+ make_qrcode.save_svg(filename)
23
+ assert(File.exists?(filename))
24
+ end
25
+
26
+ def test_save_ps
27
+ simple_save_test("tmp/test4.ps")
28
+ end
29
+
30
+ private
31
+ def make_qrcode
32
+ RQREncoder::QREncoder.new.encode("FOO BAR")
33
+ end
34
+
35
+ def simple_save_test(filename)
36
+ File.delete(filename) if File.exists?(filename)
37
+ make_qrcode.save(filename)
38
+ assert(File.exists?(filename))
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rqrencoder-magick
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Matt Robinson
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-30 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rqrencoder
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 2
32
+ version: 0.1.2
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rmagick
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ - 13
46
+ - 1
47
+ version: 2.13.1
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: An image file generator for QRCodes using RMagick
51
+ email:
52
+ - robinson.matty@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitignore
61
+ - Gemfile
62
+ - README.markdown
63
+ - Rakefile
64
+ - lib/rqrencoder-magick.rb
65
+ - lib/rqrencoder-magick/qrcode_ext.rb
66
+ - lib/rqrencoder-magick/version.rb
67
+ - rqrencoder-magick.gemspec
68
+ - test/test_qrcode_ext.rb
69
+ has_rdoc: true
70
+ homepage: http://github.com/mattyr/rqrencoder-magick
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options: []
75
+
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project: rqrencoder-magick
97
+ rubygems_version: 1.3.7
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: An image file generator for QRCodes using RMagick
101
+ test_files:
102
+ - test/test_qrcode_ext.rb