liquid_code 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/liquid_code.rb +116 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a272ced6e3f395ae26846debe69806ebe697e95a
|
4
|
+
data.tar.gz: 5543878c1b9559a014b08c1da6b2e21f336829b9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 64c9b02a04137c366eea6ff44af06150ad27542e43b296acc5a1af61bd3cc4c895a29aab97ccecc61f7dbe921fa9b817643e999efdcf94504b9f022eb7a1fd54
|
7
|
+
data.tar.gz: 35130571f07a99d91728c5dfb4c84565a5594886113024cec6b9c32d87f52759b423245cbdff62b2a7a23889a1119887437141ce4b6b3ff1d193081f782eec51
|
data/lib/liquid_code.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'RMagick'
|
2
|
+
require 'rqrcode'
|
3
|
+
require 'active_support/all'
|
4
|
+
|
5
|
+
class LiquidCode
|
6
|
+
def initialize(qr)
|
7
|
+
unless qr.is_a?(RQRCode::QRCode)
|
8
|
+
# convert input's string represantation to qr_code
|
9
|
+
qr = RQRCode::QRCode.new( qr.to_s, :size => LiquidCode.minimum_qr_size_from_string(qr.to_s), :level => :h )
|
10
|
+
end
|
11
|
+
|
12
|
+
@qr = qr
|
13
|
+
|
14
|
+
end
|
15
|
+
def as_png(bgcolor='white', fgcolor='black', fgcolorwhite=true, block_size=16)
|
16
|
+
image_size=((@qr.modules.size+1) * block_size)
|
17
|
+
canvas_image = Magick::ImageList.new
|
18
|
+
canvas_image.new_image(image_size, image_size) do
|
19
|
+
self.background_color = bgcolor
|
20
|
+
self.format = "png"
|
21
|
+
end
|
22
|
+
|
23
|
+
canvas = Magick::Draw.new
|
24
|
+
|
25
|
+
draw_to_canvas(bgcolor, fgcolor, fgcolorwhite, canvas, 0, 0, block_size)
|
26
|
+
|
27
|
+
canvas.draw(canvas_image)
|
28
|
+
canvas_image.to_blob
|
29
|
+
end
|
30
|
+
|
31
|
+
def draw_to_canvas(bgcolor, fgcolor, fgcolorwhite, canvas, ox, oy, bs)
|
32
|
+
|
33
|
+
image_size=@qr.modules.size * bs
|
34
|
+
canvas.stroke(bgcolor)
|
35
|
+
canvas.fill(bgcolor)
|
36
|
+
canvas.rectangle(ox, oy, ox + image_size, oy + image_size)
|
37
|
+
canvas.stroke(fgcolor)
|
38
|
+
canvas.fill(fgcolor)
|
39
|
+
canvas.fill_opacity(1)
|
40
|
+
canvas.stroke_width(1)
|
41
|
+
|
42
|
+
# half block size
|
43
|
+
hbs = bs/2
|
44
|
+
|
45
|
+
is_dark = lambda { |x, y|
|
46
|
+
begin
|
47
|
+
return ((@qr.is_dark(y, x) and fgcolorwhite) or ((not @qr.is_dark(y, x)) and (not fgcolorwhite)))
|
48
|
+
rescue IndexError, RQRCode::QRCodeRunTimeError
|
49
|
+
return (not fgcolorwhite)
|
50
|
+
end
|
51
|
+
}
|
52
|
+
|
53
|
+
@qr.modules.each_index do |x|
|
54
|
+
@qr.modules.each_index do |y|
|
55
|
+
if is_dark.call(x, y)
|
56
|
+
canvas.roundrectangle(ox+(x * bs), oy+(y * bs), ox+((x+1) * bs), oy+((y+1) * bs), hbs, hbs)
|
57
|
+
if (is_dark.call(x, y+1))
|
58
|
+
canvas.rectangle(ox+(x * bs), oy+(y * bs)+hbs, ox+((x+1) * bs), oy+((y+1) * bs)+hbs)
|
59
|
+
end
|
60
|
+
if (is_dark.call(x+1, y))
|
61
|
+
canvas.rectangle(ox+(x * bs)+hbs, oy+(y * bs), ox+((x+1) * bs)+hbs, oy+((y+1) * bs))
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
@qr.modules.each_index do |x|
|
69
|
+
@qr.modules.each_index do |y|
|
70
|
+
if (not is_dark.call(x, y))
|
71
|
+
|
72
|
+
# I am white
|
73
|
+
|
74
|
+
# upper right corner should be round
|
75
|
+
if (is_dark.call(x+1, y) and is_dark.call(x, y-1) and is_dark.call(x+1, y-1))
|
76
|
+
canvas.rectangle(ox+(x * bs)+hbs, oy+(y * bs), ox+((x+1) * bs), oy+((y) * bs)+hbs)
|
77
|
+
end
|
78
|
+
|
79
|
+
# lower right corner should be round
|
80
|
+
if (is_dark.call(x+1, y) and is_dark.call(x+1, y+1) and is_dark.call(x, y+1))
|
81
|
+
canvas.rectangle(ox+(x * bs)+hbs, oy+(y * bs)+hbs, ox+((x+1) * bs), oy+((y+1) * bs))
|
82
|
+
end
|
83
|
+
|
84
|
+
# lower left corner should be round
|
85
|
+
if (is_dark.call(x-1, y) and is_dark.call(x-1, y+1) and is_dark.call(x, y+1))
|
86
|
+
canvas.rectangle(ox+(x * bs), oy+(y * bs)+hbs, ox+(x * bs)+hbs, oy+((y+1) * bs))
|
87
|
+
end
|
88
|
+
|
89
|
+
# upper left corner should be round
|
90
|
+
if (is_dark.call(x-1, y-1) and is_dark.call(x-1, y) and is_dark.call(x, y-1))
|
91
|
+
canvas.rectangle(ox+(x * bs), oy+(y * bs), ox+(x * bs)+hbs, oy+(y * bs)+hbs)
|
92
|
+
end
|
93
|
+
|
94
|
+
canvas.fill(bgcolor)
|
95
|
+
canvas.stroke(bgcolor)
|
96
|
+
canvas.roundrectangle(ox+(x * bs)+1, oy+(y * bs)+1, ox+((x+1) * bs)-1, oy+((y+1) * bs)-1, hbs, hbs)
|
97
|
+
canvas.stroke(fgcolor)
|
98
|
+
canvas.fill(fgcolor)
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
def LiquidCode.minimum_qr_size_from_string(str)
|
107
|
+
sizes = [7, 14, 24, 34, 44, 58, 64, 84, 98, 119, 137, 155, 177, 194]
|
108
|
+
sizes.each_index do |i|
|
109
|
+
if str.length <= sizes[i]
|
110
|
+
return i+1
|
111
|
+
end
|
112
|
+
end
|
113
|
+
return -1
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: liquid_code
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Juraj Bednar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rmagick
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.15'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.15'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rqrcode
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.10'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.2'
|
55
|
+
description: This library uses ImageMagick and RQRCode to create QR codes with rounded
|
56
|
+
corners
|
57
|
+
email: juraj@bednar.sk
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/liquid_code.rb
|
63
|
+
homepage: https://github.com/jooray/liquid-code
|
64
|
+
licenses:
|
65
|
+
- MIT
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.6.3
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: Generate QR codes with rounded corners
|
87
|
+
test_files: []
|