Module: RQRCode::Export::SVG
- Defined in:
- lib/rqrcode/export/svg.rb
Instance Method Summary collapse
-
#as_svg(options = {}) ⇒ Object
Render the SVG from the Qrcode.
Instance Method Details
#as_svg(options = {}) ⇒ Object
Render the SVG from the Qrcode.
Options: offset - Padding around the QR Code (e.g. 10) fill - Background color (e.g “ffffff” or :white) color - Foreground color for the code (e.g. “000000” or :black) module_size - The Pixel size of each module (e.g. 11) shape_rendering - Defaults to crispEdges
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 43 44 45 46 47 48 |
# File 'lib/rqrcode/export/svg.rb', line 17 def as_svg(={}) offset = [:offset].to_i || 0 color = [:color] || "000" shape_rendering = [:shape_rendering] || "crispEdges" module_size = [:module_size] || 11 # height and width dependent on offset and QR complexity dimension = (self.module_count*module_size) + (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}" shape-rendering="#{shape_rendering}">} close_tag = "</svg>" result = [] self.modules.each_index do |c| tmp = [] self.modules.each_index do |r| y = c*module_size + offset x = r*module_size + offset next unless self.is_dark(c, r) tmp << %{<rect width="#{module_size}" height="#{module_size}" 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 [xml_tag, open_tag, result, close_tag].flatten.join("\n") end |