java - 使用 ZXing ("Zebra Crossing") API 在 Java 中生成二维码

标签 java qr-code zxing

以下代码成功生成二维码。

二维码的高度和宽度根据我们给出的输入qrCodeData而变化。

Fox 示例如果 qrCodeData=Hello World! 则生成的 QR 码的高度和宽度较低。如果 qrCodeData=A 移动电话是一种可移植电话,当用户在电话服务区内移动时,可以通过射频链路调用和接听电话。射频链路与移动电话运营商的交换系统建立连接,从而提供对公共(public)交换电话网络 (PSTN) 的访问,然后生成的 QR 码的高度和宽度更大。

附上示例二维码。 for less data for 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();
}
}

最佳答案

您的图像(更准确地说:图像的像素部分)具有不同的尺寸, 因为它周围有一个白色的边距。 默认这个边距,即所谓的QR code quiet zone , 宽度为 4。 因此,要摆脱 margin您可以将其设置为 0。
像这样修改您的 main 方法:

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);

然后生成的图像没有边距,像素部分具有相同的大小。

enter image description here enter image description here

关于java - 使用 ZXing ("Zebra Crossing") API 在 Java 中生成二维码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841771/

相关文章:

java - 如何使用java将12小时制转换为24小时制

java - Java 验证字符串

java - 在 ZXing 生成的 QR 码上删除边距/边框空间并将 ErrorCorrectionLevel 设置为 'H'?

python - 将图像分组为一张图像

c# - CCSDS里德·所罗门编码

java - ZXING Barcode Scanner如何不能全屏只能半屏

android - 带有 ZXing 和 ZBar 的 QR 扫描器无法读取卡片上的低质量代码

java - ArrayList<X> 作为 HashMap 中的键,但 X[] 数组不起作用

android - ZXing 2.0 二维码扫描后启动 fragment

java - 使用 Apache Commons CSV 从带有 header 的 HashMap 列表写入 CSV