Read more

Generating barcodes with the Barby gem

Arne Hartherz
April 11, 2017Software engineer at makandra GmbH

Barby is a great Ruby gem to generate barcodes of all different sorts.

Illustration UI/UX Design

UI/UX Design by makandra brand

We make sure that your target audience has the best possible experience with your digital product. You get:

  • Design tailored to your audience
  • Proven processes customized to your needs
  • An expert team of experienced designers
Read more Show archive.org snapshot

It includes support for QR codes via rQRCode Show archive.org snapshot ; if you need to render only QR codes, you may want to use that directly.

Example usage

Generating a barcode is simple:

>> Barby::Code128.new('Hello Universe').to_png
=> "\x89PNG\r\n\u001A..."

Configuration

Barby supports several barcode types Show archive.org snapshot and you must require all necessary files explicitly.

For the example above these are barby/barcode/code_128 and barby/outputter/png_outputter.
You can specify that in your Gemfile like so:

gem 'barby', require: %w(barby barby/barcode/code_128 barby/outputter/png_outputter)

Pro tips

  • Barby's PNG outputter uses ChunkyPNG under the hood. You can call to_image to receive a ChunkyPNG::Canvas that you can rotate, resample, or just convert to a data URL.

    >> Barby::Code128.new('Hello Universe').to_image.to_data_url
    => "data:image/png;base64,iVBORw0KGgoAA..."
    
  • For super-crisp barcodes, render them as SVG. Printing images usually causes some level of blur, but SVGs don't. Require Barby's svg_outputter and render an SVG (XML) string:

    svg = Barby::Code128.new('Hello Universe').to_svg(margin: 0)
    

    To make that SVG freely scalable, you need to add preserveAspectRatio="none":

    svg.sub!('<svg ', '<svg preserveAspectRatio="none" ')
    

    Generating a data URI is simple:

    "data:image/svg+xml;utf8,#{svg.gsub(/\n/, '')}"
    
  • See the wiki Show archive.org snapshot for options on outputters and more.

Posted by Arne Hartherz to makandra dev (2017-04-11 11:08)