Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QR code scan from image file

Tried to use several libraries like ZXing, ZBar and their forks but didn't find way to scan barcode not from camera but from file.

Can someone point me to right direction? Preferably I'm looking into ZXing: how to scan image from file (not from camera).

Please.

like image 526
Barmaley Avatar asked Aug 21 '15 06:08

Barmaley


1 Answers

In the end I've found solution. Code is (originated from here):

import com.google.zxing.*;

public static String scanQRImage(Bitmap bMap) {
    String contents = null;

    int[] intArray = new int[bMap.getWidth()*bMap.getHeight()];
    //copy pixel data from the Bitmap into the 'intArray' array
    bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight());

    LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(), intArray);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

    Reader reader = new MultiFormatReader();
    try {
        Result result = reader.decode(bitmap);
        contents = result.getText();
    }
    catch (Exception e) {
        Log.e("QrTest", "Error decoding barcode", e);
    }
    return contents;
}

Gradle referencing as:

dependencies {
    compile 'com.google.zxing:core:3.2.1'
}

Usage:

InputStream is = new BufferedInputStream(new FileInputStream(file));
Bitmap bitmap = BitmapFactory.decodeStream(is);
String decoded=scanQRImage(bitmap);
Log.i("QrTest", "Decoded string="+decoded);
like image 155
Barmaley Avatar answered Oct 12 '22 01:10

Barmaley