以下のコードはQRコードを正常に生成します。ZXing( "Zebra Crossing")APIを使用したJavaでのQRコード生成
QRコードの高さと幅は、入力に基づいて異なりますqrCodeData私たちが与えた。
フォックス例の場合qrCodeData = Hello World!生成されたQRコードの高さと幅が低い。 qrCodeData =携帯電話は、ユーザーが電話サービスエリア内を移動しているときに無線周波数リンクを使用して電話をかけたり受信したりできる携帯電話です。無線周波数リンクは、公衆交換電話網(PSTN)へのアクセスを提供する携帯電話事業者の交換システムへの接続を確立し、生成されたQRコードの高さおよび幅がより大きい。
私は同じ高さで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();
}
}
ZXingは十分なスペースがない場合に暗号化することができません。あなたは 'ImageView'(QRコードを表示する)に固定サイズのDPを渡そうとしましたか(つまり、' warp_content'を使用していません)?生成されるビットマップは大きくなりますが、コンテナに合わせて縮小されます。しかし、読者がまだ縮小されたQRコードを読むことができるようにしてください;-) – mithrop
返信mithropに感謝します。 – Parthiban