1 raise "ZXing requires JRuby" unless defined?(JRuby)
3 require File.expand_path( File.dirname(__FILE__) + '/core.jar' ) # ZXing core classes
4 require File.expand_path( File.dirname(__FILE__) + '/javase.jar' ) # ZXing JavaSE classes
9 java_import com.google.zxing.MultiFormatReader
10 java_import com.google.zxing.BinaryBitmap
11 java_import com.google.zxing.Binarizer
12 java_import com.google.zxing.common.GlobalHistogramBinarizer
13 java_import com.google.zxing.LuminanceSource
14 java_import com.google.zxing.client.j2se.BufferedImageLuminanceSource
16 # Standard Java classes
17 java_import javax.imageio.ImageIO
18 java_import java.net.URL
22 @@decoder = MultiFormatReader.new
24 # Transform the module into a singleton!
27 def decode(descriptor)
30 rescue NativeException
35 def decode!(descriptor)
36 descriptor = descriptor.path if descriptor.respond_to? :path
37 descriptor = descriptor.to_s
38 descriptor = case descriptor
39 when URI.regexp(['http', 'https'])
42 Java::JavaIO::File.new(descriptor)
44 image = ImageIO.read(descriptor)
45 bitmap = to_bitmap(image)
46 @@decoder.decode(bitmap).to_s
52 luminance = BufferedImageLuminanceSource.new(image)
53 binarizer = GlobalHistogramBinarizer.new(luminance)
54 BinaryBitmap.new(binarizer)