生成缺少像素的QR码

时间:2018-12-26 22:28:46

标签: java pdf qr-code boofcv

对于一个项目,要求我们重新创建与收到的pdf相同的QR码。

我设法做到了几乎相同,但找不到解决方案。这是我们需要重新创建的QR码(我已经添加了红色箭头)。

QR code I have to reproduce

您几乎每次都会看到少一个像素,而在另一个地方则多一个像素。这是我的QR码,但我没有遗漏任何像素。

QR code I generated

我正在使用boofcv库,这是我的代码

QrCode qr = new QrCodeEncoder().setError(QrCode.ErrorLevel.M).setMask(QrCodeMaskPattern.M111).setVersion(1).addBytes("E-ALPZNUP").fixate();
    QrCodeGeneratorImage render = new QrCodeGeneratorImage(42);
    render.render(qr);
    BufferedImage buffimage = ConvertBufferedImage.convertTo(render.getGray(),null);

如果某人对另一个库有相同的解决方案,那么我可以接受它。

2 个答案:

答案 0 :(得分:1)

我知道麻烦您为什么要生成完全相同的QR码不是我的事,但是我的猜测是原始图片的“多余”和“缺失”像素是由于JPEG编码图片。我知道它在PNG中,但也许在生成之后就被编码为JPEG,然后又返回到PNG。 当像素出现时根本没有图案,因此必须有某种随机或模糊的东西将其添加到第一张图像中。 另外,这是他们添加到原始QR上的某种签名,以标识它是由特定机构合法生成的。

从阅读的角度来看,它们完全相同,并且两个QR码将提供相同的输出。

答案 1 :(得分:0)

您可能可以尝试免费Spire.Barcode for Java 和以下代码:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;
import com.spire.barcode.QRCodeECL;
import com.sun.javafx.print.Units;

public class QR_Code {

    public static void main(String[] args) throws IOException {

        //create an instance of BarcodeSetteings
        BarcodeSettings settings = new BarcodeSettings();
        //set barcode type
        settings.setType(BarCodeType.QR_CODE);
        //set barcode data
        settings.setData("ABC 123456789");
        //set dispaly text
        settings.setData2D("ABC 123456789");
        //show text on bottom
        settings.setShowTextOnBottom(true);
        //set the border invisible
        settings.hasBorder(false);
        //set width of the barcode module
        settings.setX(2);
        //set the error correction level
        settings.setQRCodeECL(QRCodeECL.M);    
        //create BarCodeGenerator object based on settings
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
        //generate image data and store in BufferedImage instance
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
        //save to image
        ImageIO.write(bufferedImage,"png",new File("QR_CODE.png"));
        System.out.println("Complete!");
    }    
}

来自Generate QR Code in Java

的代码副本