module RQRCode::Export::SVG
Constants
- DEFAULT_SVG_ATTRIBUTES
- SVG_PATH_COMMANDS
Public Instance Methods
as_svg(options = {})
click to toggle source
Render the SVG
from the Qrcode.
Options: offset - Padding around the QR Code in pixels
(default 0)
fill - Background color e.g “ffffff”
(default none)
color - Foreground color e.g “000”
(default "000")
module_size - The Pixel size of each module
(defaults 11)
shape_rendering - SVG
Attribute: auto | optimizeSpeed | crispEdges | geometricPrecision
(defaults crispEdges)
standalone - Whether to make this a full SVG
file, or only an svg to embed in other svg
(default true)
use_path - Use <path> to render SVG
rather than <rect> to significantly reduce size
and quality. This will become the default in future versions. (default false)
viewbox - replace `width` and `height` in <svg> with a viewBox, allows CSS scaling
(default false)
svg_attributes - A optional hash of custom <svg> attributes. Existing attributes will remain.
(default {})
# File lib/rqrcode/export/svg.rb, line 158 def as_svg(options = {}) fill = options[:fill] use_path = options[:use_path] offset = options[:offset].to_i || 0 color = options[:color] || "000" shape_rendering = options[:shape_rendering] || "crispEdges" module_size = options[:module_size] || 11 standalone = options[:standalone].nil? ? true : options[:standalone] viewbox = options[:viewbox].nil? ? false : options[:viewbox] svg_attributes = options[:svg_attributes] || {} # height and width dependent on offset and QR complexity dimension = (@qrcode.module_count * module_size) + (2 * offset) # use dimensions differently if we are using a viewBox dimensions_attr = viewbox ? %(viewBox="0 0 #{dimension} #{dimension}") : %(width="#{dimension}" height="#{dimension}") svg_tag_attributes = (DEFAULT_SVG_ATTRIBUTES + [ dimensions_attr, %(shape-rendering="#{shape_rendering}") ] + svg_attributes.map { |k, v| %(#{k}="#{v}") }).join(" ") xml_tag = %(<?xml version="1.0" standalone="yes"?>) open_tag = %(<svg #{svg_tag_attributes}>) close_tag = "</svg>" output_tag = (use_path ? Path : Rect).new(@qrcode) output_tag.build(module_size, offset, color) if fill output_tag.result.unshift %(<rect width="#{dimension}" height="#{dimension}" x="0" y="0" style="fill:##{fill}"/>) end if standalone output_tag.result.unshift(xml_tag, open_tag) output_tag.result << close_tag end output_tag.result.join end