rQRCode, Encode QRCodes

Build Status

Short changelog

0.6.0 (Jun 2, 2015)

  • Improved png rendering. Previous png rendering could result in hard to scan qrcodes. Big thanks to Bart Jedrocha

0.5.5 (Apr 25, 2015)

  • Fixed major bug. The rs block data was missing resulting in qr codes failing to be generated. Upgrade highly recomended!!


rQRCode is a library for encoding QR Codes in Ruby. It has a simple interface with all the standard qrcode options. It was adapted from the Javascript library by Kazuhiko Arase.

Let's clear up some rQRCode stuff.

  • rQRCode is a standalone library It requires no other libraries. Just Ruby!
  • It is an encoding library. You can't decode QR codes with it.
  • The interface is simple and assumes you just want to encode a string into a QR code
  • QR code is trademarked by Denso Wave inc



You may get the latest stable version from Rubygems.

gem install rqrcode

You can also get the latest source from https://github.com/whomwah/rqrcode

git clone git://github.com/whomwah/rqrcode.git


To run the tests:

$ rake

Loading rQRCode Itself

You have installed the gem already, yeah?

require 'rubygems'
require 'rqrcode'

Simple QRCode generation to screen

qr = RQRCode::QRCode.new( 'my string to generate', :size => 4, :level => :h )
puts qr.to_s
# Prints:
# xxxxxxx x  x x   x x  xx  xxxxxxx
# x     x  xxx  xxxxxx xxx  x     x
# x xxx x  xxxxx x       xx x xxx x
# ... etc

Simple QRCode generation to template (RubyOnRails)


@qr = RQRCode::QRCode.new( 'my string to generate', :size => 4, :level => :h )

View: (minimal styling added)

<style type="text/css">
table {
  border-width: 0;
  border-style: none;
  border-color: #0000ff;
  border-collapse: collapse;
td {
  border-width: 0;
  border-style: none;
  border-color: #0000ff;
  border-collapse: collapse;
  padding: 0;
  margin: 0;
  width: 10px;
  height: 10px;
td.black { background-color: #000; }
td.white { background-color: #fff; }

<%= raw @qr.as_html %>

If you want to generate the HTML manually for customization, you can start with the following:

<% @qr.modules.each_index do |x| %>
  <% @qr.modules.each_index do |y| %>
   <% if @qr.dark?(x,y) %>
    <td class="black"/>
   <% else %>
    <td class="white"/>
   <% end %>
  <% end %>
<% end %>


You can also require optional export features:

  • SVG -> no dependencies
  • PNG -> depends on 'chunky_png' gem
  • JPG -> depends on 'mini_magick' gem

Example to render png:

require 'rqrcode/export/png'
image = RQRCode::QRCode.new("nice qr").as_png

Notice the 'as_png'. Same goes for 'as_svg', 'as_xxx'.

Export Options

Exporters support these options:

  • size - Image size, in pixels.
  • fill - Background color, defaults to 'white'
  • color - Foreground color, defaults to 'black'

SVG Export supports the parameter module_size to generate smaller or larger QR Codes

require 'rqrcode/export/svg'
svg = RQRCode::QRCode.new("nice qr").as_svg(:module_size => 6)


Original author: Duncan Robertson

Special thanks to the following people for submitting patches:


  • Fork the project
  • Send a pull request
  • Don't touch the .gemspec, I'll do that when I release a new version


MIT License (http://www.opensource.org/licenses/mit-license.html)