Создайте QR-код с отсутствующим пикселем - PullRequest
0 голосов
/ 27 декабря 2018

Для проекта нас попросили воссоздать тот же QR-код, что и в PDF-файле, который мы получили.

Мне удалось сделать почти то же самое, но я не могу найти решение.Вот QR-код, который нам нужно воссоздать (я добавил красные стрелки).

QR-код, который мне нужно воспроизвести

Вы видите, что почти каждый разменьше пикселя и в другом месте больше пикселя.Вот мой QR-код, за исключением того, что я не пропускаю ни одного пикселя.

QR-код, который я сгенерировал

Я использую библиотеку 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 голосов
/ 27 декабря 2018

Возможно, вы можете попробовать Бесплатный Spire.Barcode для 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!");
    }    
}

Копирование кода из Создание QR-кода в Java

0 голосов
/ 27 декабря 2018

Я знаю, что не мое дело беспокоиться о том, почему у вас такое требование генерировать точно такой же QR-код, но я предполагаю, что «лишние» и «отсутствующие» пиксели исходного изображения обусловлены кодировкой JPEGизображение.Я знаю, что это в PNG, но, возможно, после генерации он был закодирован в JPEG, а затем обратно в PNG.Там, где пиксель появляется, нет никакого шаблона, поэтому должно быть что-то случайное или нечеткое, которое добавляет его к первому изображению.В качестве альтернативы, это какая-то подпись, которую они добавляют к исходному QR-коду, чтобы определить, что он был законно сгенерирован определенным органом.

С точки зрения чтения, они оба абсолютно одинаковы, и оба QR-кода будутобеспечить тот же вывод.

...