rqrencoder-magick 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/.gitignore +6 -0
- data/Gemfile +4 -0
- data/README.markdown +32 -0
- data/Rakefile +2 -0
- data/lib/rqrencoder-magick.rb +5 -0
- data/lib/rqrencoder-magick/qrcode_ext.rb +70 -0
- data/lib/rqrencoder-magick/version.rb +5 -0
- data/rqrencoder-magick.gemspec +24 -0
- data/test/test_qrcode_ext.rb +40 -0
- metadata +102 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -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
|
data/Rakefile
ADDED
@@ -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,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
|