2017-03-16 24 views
2

以下のコードはQRコードを正常に生成します。ZXing( "Zebra Crossing")APIを使用したJavaでのQRコード生成

QRコードの高さと幅は、入力に基づいて異なりますqrCodeData私たちが与えた。

フォックス例の場合qrCodeData = Hello World!生成されたQRコードの高さと幅が低い。 qrCodeData =携帯電話は、ユーザーが電話サービスエリア内を移動しているときに無線周波数リンクを使用して電話をかけたり受信したりできる携帯電話です。無線周波数リンクは、公衆交換電話網(PSTN)へのアクセスを提供する携帯電話事業者の交換システムへの接続を確立し、生成されたQRコードの高さおよび幅がより大きい。

添付サンプルQRコード。 for less datafor large data

私は同じ高さでQRコードを生成し、qrCodeDataに与えられたデータにかかわらず、幅にしたいです。ある人が私に助言します。 ありがとうございます。

package com.javapapers.java; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

import javax.imageio.ImageIO; 

import com.google.zxing.BarcodeFormat; 
import com.google.zxing.BinaryBitmap; 
import com.google.zxing.EncodeHintType; 
import com.google.zxing.MultiFormatReader; 
import com.google.zxing.MultiFormatWriter; 
import com.google.zxing.NotFoundException; 
import com.google.zxing.Result; 
import com.google.zxing.WriterException; 
import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 
import com.google.zxing.client.j2se.MatrixToImageWriter; 
import com.google.zxing.common.BitMatrix; 
import com.google.zxing.common.HybridBinarizer; 
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; 

public class QRCode { 

public static void main(String[] args) throws WriterException, IOException, 
     NotFoundException { 
String qrCodeData = "Hello World!"; 
String filePath = "QRCode.png"; 
String charset = "UTF-8"; // or "ISO-8859-1" 
Map<EncodeHintType, ErrorCorrectionLevel> hintMap = new                  HashMap<EncodeHintType, ErrorCorrectionLevel>(); 
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); 

    createQRCode(qrCodeData, filePath, charset, hintMap, 200, 200); 
    System.out.println("QR Code image created successfully!"); 

    System.out.println("Data read from QR Code: " 
      + readQRCode(filePath, charset, hintMap)); 

} 

public static void createQRCode(String qrCodeData, String filePath, 
     String charset, Map hintMap, int qrCodeheight, int qrCodewidth) 
     throws WriterException, IOException { 
    BitMatrix matrix = new MultiFormatWriter().encode(
      new String(qrCodeData.getBytes(charset), charset), 
      BarcodeFormat.QR_CODE, qrCodewidth, qrCodeheight, hintMap); 
    MatrixToImageWriter.writeToFile(matrix, filePath.substring(filePath 
      .lastIndexOf('.') + 1), new File(filePath)); 
} 

public static String readQRCode(String filePath, String charset, Map hintMap) 
     throws FileNotFoundException, IOException, NotFoundException { 
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
      new BufferedImageLuminanceSource(
        ImageIO.read(new FileInputStream(filePath))))); 
    Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap, 
      hintMap); 
    return qrCodeResult.getText(); 
} 
} 
+0

ZXingは十分なスペースがない場合に暗号化することができません。あなたは 'ImageView'(QRコードを表示する)に固定サイズのDPを渡そうとしましたか(つまり、' warp_content'を使用していません)?生成されるビットマップは大きくなりますが、コンテナに合わせて縮小されます。しかし、読者がまだ縮小されたQRコードを読むことができるようにしてください;-) – mithrop

+0

返信mithropに感謝します。 – Parthiban

答えて

1

あなたの画像(より正確にすることが:画像の画素部)余白がその周りにありますので 、異なるサイズを有します。

Map<EncodeHintType, Object> hintMap = new HashMap<EncodeHintType, Object>(); 
hintMap.put(EncodeHintType.MARGIN, 0); 
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); 

createQRCode(qrCodeData, filePath, charset, hintMap, 200, 200); 

: は、デフォルトでは、このマージン、QR code quiet zoneいわゆるは、marginあなたはこのようなあなたのmain方法を変更します0
にそれを設定することができますを取り除くために、したがって4 の幅を持っていますその結果得られる画像に余白がなく、画素部分のサイズが同じになります。

enter image description here enter image description here

+0

トマスに感謝します。今私は、データにかかわらず同じ高さと幅のQRを取得します。 – Parthiban

+0

@Parthibanようこそ。これで問題が解決した場合は、回答を受け入れることを検討してください。 –

関連する問題