-2

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

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

二维码我要复制

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

我生成的二维码

我正在使用 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);

如果有人与另一个图书馆有相同的解决方案,我可以接受。

4

2 回答 2

2

我知道为什么你有这样的要求来生成完全相同的二维码不是我的事,但我的猜测是原始图片的“额外”和“缺失”像素是由于图像的 JPEG 编码。我知道它是 PNG 格式,但可能在生成后它被编码为 JPEG,然后又返回为 PNG。像素出现时根本没有图案,因此必须有一些随机或模糊的东西将其添加到第一张图像中。或者,这是他们添加到原始 QR 的某种签名,以识别它是由特定机构合法生成的。

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

于 2018-12-26T22:52:10.220 回答
0

你可以试试Free 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 的代码副本

于 2018-12-27T01:53:26.483 回答