Class: QRCoder::Renderers::SVG
- Inherits:
-
Object
- Object
- QRCoder::Renderers::SVG
- Defined in:
- lib/qrcoder/renderers/svg.rb
Class Method Summary collapse
-
.render(qrcode, options = {}) ⇒ Object
Render the SVG from the qrcode string provided from the RQRCode gem Options: offset - Padding around the QR Code (e.g. 10) unit - How many pixels per module (Default: 11) fill - Background color (e.g “ffffff” or :white) color - Foreground color for the code (e.g. “000000” or :black).
Class Method Details
.render(qrcode, options = {}) ⇒ Object
Render the SVG from the qrcode string provided from the RQRCode gem
Options:
offset - Padding around the QR Code (e.g. 10)
unit - How many pixels per module (Default: 11)
fill - Background color (e.g "ffffff" or :white)
color - Foreground color for the code (e.g. "000000" or :black)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/qrcoder/renderers/svg.rb', line 12 def render(qrcode, ={}) offset = [:offset].to_i || 0 color = [:color] || "000" unit = [:unit] || 11 # height and width dependent on offset and QR complexity dimension = (qrcode.module_count*unit) + (2*offset) xml_tag = %{<?xml version="1.0" standalone="yes"?>} open_tag = %{<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="#{dimension}" height="#{dimension}">} close_tag = "</svg>" result = [] qrcode.modules.each_index do |c| tmp = [] qrcode.modules.each_index do |r| y = c*unit + offset x = r*unit + offset next unless qrcode.is_dark(c, r) tmp << %{<rect width="#{unit}" height="#{unit}" x="#{x}" y="#{y}" style="fill:##{color}"/>} end result << tmp.join end if [:fill] result.unshift %{<rect width="#{dimension}" height="#{dimension}" x="0" y="0" style="fill:##{[:fill]}"/>} end svg = [xml_tag, open_tag, result, close_tag].flatten.join("\n") end |