module RQRCode::Export::SVG
def as_svg(options = {})
(default {})
svg_attributes - A optional hash of custom
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 # Prefix hexadecimal colors unless using a named color (symbol) fill = "##{fill}" unless fill.is_a?(Symbol) output_tag.result.unshift %(<rect width="#{dimension}" height="#{dimension}" x="0" y="0" fill="#{fill}"/>) end if standalone output_tag.result.unshift(xml_tag, open_tag) output_tag.result << close_tag end output_tag.result.join end