ZXing FormatException декодирование сгенерированный ZXing QRCode

Следующий код, полученный из encoding-and-decoding-random-byte- array-with-zxing, кодирует байтовый массив (длиной 35 и всеми элементами 0) с помощью ZXing, а затем снова декодирует его.

package zxing.sandpit;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.qrcode.QRCodeWriter;
import java.awt.image.BufferedImage;
import java.io.UnsupportedEncodingException;

public class Problem {

    public static void main(String[] args) throws UnsupportedEncodingException, WriterException, NotFoundException, ChecksumException, FormatException {
        byte[] bytes = new byte[35];
        String dataString = new String(bytes, "ISO-8859-1");
        QRCodeWriter writer = new QRCodeWriter();

        BitMatrix bitMatrix = writer.encode(
                dataString,
                BarcodeFormat.QR_CODE, 256, 256); 
        System.out.println("A");
        BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
        System.out.println("B");
        final Result result = new QRCodeReader().decode(
                new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(image.getWidth(), image.getHeight(),
                        image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0,
                                image.getWidth())))));

        System.out.println("C");
        byte[] bytes1 = result.getText().getBytes("ISO8859_1");

    }

}

Несмотря на то, что он отлично работает для всех массивов длиной меньше 35, для массива размером 35 выдается FormatException, а C никогда не печатается.

A
B
Exception in thread "main" com.google.zxing.FormatException

Какую ошибку я делаю?


person fundagain    schedule 23.10.2017    source источник


Ответы (1)


ZXing обнаруживает неправильный маркер (ложное срабатывание) в сгенерированном qr-коде. Это случается, особенно если используются синтетические изображения. Попробуйте подсказку по расшифровке PURE_BARCODE.

person Michael    schedule 23.10.2017