7. The DMTX Library

The DMS Ruby extension includes a native wrapper for libdmtx. This provides a much more reliable bar-code system by which to scan and identify documents. For example, the following is the image matrix produced for the text lorem ipsum:

You can store an arbitrarily amount of text in the image. The image just grows with the amount of data. For example, consider the following data:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id neque
velit. Integer ultricies, tortor et luctus tempus, mi urna facilisis velit,
ultricies ornare dolor mauris elementum leo. Proin suscipit, enim eu gravida
posuere, justo lorem vestibulum risus, quis scelerisque lacus tortor ut
sapien. Aliquam erat volutpat. Aliquam erat volutpat. In vitae quam leo. Morbi
urna metus, euismod quis ultrices sed, commodo ac risus. Fusce elementum
vehicula nunc, non lacinia libero convallis vel. Maecenas elementum imperdiet
dui quis venenatis. Vestibulum cursus risus vel sapien egestas
lacinia. Pellentesque urna lacus, mattis vel rhoncus sed, laoreet eu
lacus. Nulla ut velit turpis. Cras et ornare est. Fusce pellentesque feugiat
magna faucibus tempor. Cras sit amet felis ligula, non egestas
urna. Pellentesque accumsan massa quis lacus viverra consectetur. Nunc velit
lacus, bibendum vitae lacinia sit amet, lobortis fringilla risus.

Here is the corresponding DMTX image produced for that text:

The Ruby extension follows the exact same API as the native Ruby wrapper in the DMTX source distribution, but builds natively for Ruby 1.9.x. The following code (adapted from the Ruby test suite) illustrates it's use:


require 'rubygems'
require 'RMagick'

require 'jw/dms'

$file = 'output.png'
$text = 'some random text'

dmtx = JW::DMS::Dmtx.new()

dmtx.encode($text).write($file)
  
images = Magick::Image.read($file)
images.each do |image|
  decodedValue = dmtx.decode(image, 100)
  if not decodedValue.empty?
    assert decodedValue[0] == $text
  end
end

You will need to make sure you have the DMTX dev library package and the Ruby RMagic gem installed. To do this on Ubuntu, do the following:

bash $ sudo apt-get install libdmtx-dev 
bash $ sudo apt-get install libmagick++-dev libmagickcore-dev libmagickwand-dev
bash $ sudo gem1.9.1 install rmagick