rqrencoder-magick 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|