2017-10-23 15 views
0

encoding-and-decoding-random-byte-array-with-zxingから派生した次のコードは、ZXingを使用して(長さが35、すべての要素が0)のバイト配列をエンコードし、再度デコードします。ZXing FormatException復号化ZXing生成QRCode

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 

私は間違いがありますか?

答えて

1

ZXingは、生成されたqrコード内で間違ったマーカー(偽陽性)を検出します。これは、特に合成画像が使用される場合に起こります。デコードのヒントPURE_BARCODEを試してください。

+0

ありがとうございます、PURE_BARCODEさんが働いています。 – fundagain

関連する問題