2017-10-23 1 views
0

encoding-and-decoding-random-byte-array-with-zxing에서 파생 된 다음 코드는 ZXing을 사용하여 (길이가 35이고 모든 요소가 0) 바이트 배열을 인코딩 한 다음 다시 디코딩합니다. 배열 크기 35, 35보다 작은 길이의 모든 배열에 대해 완벽하게 작동하는 동안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"); 

    } 

} 

FormatException가 발생하고 C가 인쇄되지 않습니다.

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

내가 실수를 저지르고 있습니까?

답변

1

ZXing은 생성 된 qr 코드에서 잘못된 마커 (거짓 긍정)를 감지합니다. 이것은 특히 합성 이미지가 사용되는 경우에 발생합니다. 디코딩 힌트 PURE_BARCODE를 사용해보십시오.

+0

감사합니다. PURE_BARCODE가 작동했습니다. – fundagain

관련 문제