Wenn ich von Bibliotheken spreche, die QR-Code in Java erstellen, habe ich den Eindruck, dass ZXing von Google häufig eingeführt wird. Als ich es tatsächlich benutzte, war ich ein wenig besorgt, dass der Quellcode relativ niedrig aussehen würde.
Grob geschrieben sieht es so aus.
Quellcode zum Generieren von QR-Bildern mit ZXing
BitMatrix matrix = new QRCodeWriter().encode(
"https://qiita.com/nimzo6689", BarcodeFormat.QR_CODE, 320, 320
);
BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(matrix);
ImageIO.write(qrCodeImage, "png", Files.newOutputStream(Paths.get("qrcode.png ")));
In den meisten Fällen wird es jedoch in der Realität komplizierter. Passen Sie beispielsweise die Ränder an, ändern Sie den Zeichencode, wechseln Sie zu einer anderen Farbe anstelle von Schwarzweiß usw. Ich denke auch, dass es Fälle gibt, in denen Sie als SVG-Datei ausgeben möchten, damit sich die Bildqualität nicht verschlechtert, selbst wenn Sie sie dehnen.
Wenn Sie versuchen, das oben genannte zu erreichen, haben Sie mehr Code mit niedrigeren Ebenen. Wenn Sie eine Bibliothek namens QRGen verwenden, die durch das Umschließen von ZXing erstellt wurde, Ich habe kürzlich erfahren, dass Sie einfach einen Prozess schreiben können, um ein QR-Bild mit einer Methodenkette zu generieren. Ich habe versucht zusammenzufassen, wie man es benutzt.
Grundsätzlich wie gewohnt für Paketverwaltungstools wie Maven, Gradle Es kann durch Hinzufügen einer Abhängigkeit verwendet werden. Seit Version 2.1.0 ist jedoch ein Punkt zu beachten Wir haben es nicht für Maven Central freigegeben Es ist erforderlich, jitpack.io zum Repository hinzuzufügen.
Wie es auf der offiziellen Seite ist, ist es in Gradle wie folgt.
build.gradle
apply plugin: 'java'
sourceCompatibility = 1.12
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
//Bei Verwendung mit Java SE. Unter Android ist die Artefakt-ID Android.
compile 'com.github.kenglxn.QRGen:javase:2.6.0'
}
Mit ZXing müssen Sie Core und Javase oder Android und zwei Abhängigkeiten schreiben. Mit QRGen brauchen Sie nur einen, damit Sie ihn ein wenig genießen können.
Ich werde den Quellcode, den ich lokal ausprobiert habe, später veröffentlichen. Wie der Name schon sagt, ist QRGen eine dedizierte Bibliothek zum Generieren von QR-Code Es scheint, dass Sie die ZXing-API verwenden müssen, wenn Sie scannen möchten.
Der in diesem Artikel veröffentlichte Code wurde in der folgenden Umgebung überprüft.
Windows10 Pro, Java12(AdoptOpenJDK with HotSpot), IntelliJ IDEA 2019
Der Beispielcode im Artikel lässt die Importanweisung usw. weg. Wenn Sie also die gesamte Datei überprüfen möchten, lesen Sie bitte Gist.
Stellen Sie außerdem sicher, dass das generierte QR-Bild von der Android-App [hier] gelesen werden kann (https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ja). tat.
Erstens, wie man es mit einem Dateiobjekt erstellt.
Da QRCode # file
eine Image-Datei namens QRCode.png
im temporären Verzeichnis erstellt,
Es bewegt sich zu dem Pfad, in dem Sie es ausgeben möchten.
Ich habe "REPLACE_EXISTING" angegeben, damit ich so oft ich möchte in denselben Dateinamen schreiben kann.
QRGenToFile.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png "), StandardCopyOption.REPLACE_EXISTING);
Es ist das gleiche wie der Beispielcode, den ich am Anfang geschrieben habe, aber es ist viel einfacher Sie müssen nicht einmal die ZXing-API kennen, was die Implementierung und das Lesen erleichtert.
Hier ist das tatsächlich erzeugte QR-Bild. Wenn Sie keine Größe angeben, scheint es 125x125 zu sein.
Im Folgenden wird beschrieben, wie Sie ein ByteArrayOutputStream-Objekt erstellen.
QRGenToBaos.java
try (ByteArrayOutputStream qrCode = QRCode.from("https://qiita.com/nimzo6689").stream();
OutputStream outputStream = Files.newOutputStream(Paths.get("qrcode.png "))) {
qrCode.writeTo(outputStream);
qrCode.flush();
}
Die Codemenge ist größer als die von "QRCode # file". Zum Beispiel "ImageIO.read (neuer ByteArrayInputStream (qrCode.toByteArray ())") Dies scheint praktisch zu sein, wenn Sie "BufferedImage" generieren und eine Art Bildverarbeitung durchführen möchten.
Außerdem erstelle ich keine temporäre Datei, daher scheint die Leistung besser zu sein.
QRCode # stream
hat einen neuen OutputStream erstellt,
Wenn Sie ein QR-Bild in einen bereits generierten Ausgabestream schreiben möchten, können Sie "QRCode # writeTo" verwenden.
QRGenToExistingOs.java
try (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png "))) {
QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
os.flush();
}
Es erfordert weniger Beschreibung als "QRCode # stream".
Sie können das Bildformat, die Größe und die Farbe des generierten QR-Bildes angeben.
Darüber hinaus können die in EncodeHintType
in ZXing angegebenen Einstellungen auch über das QRCode-Objekt festgelegt werden.
QRGenWithHint.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689")
.to(ImageType.GIF)
.withSize(320, 320)
.withColor(0xFF6876B4, 0xFFF7F4F7)
.withCharset("UTF-8")
.withErrorCorrection(ErrorCorrectionLevel.L)
.withHint(EncodeHintType.MARGIN, 2)
.file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.gif"), StandardCopyOption.REPLACE_EXISTING);
Der durch "withColor" angegebene Wert hat das Format Transparenz (2 Byte) + RGB (6 Byte).
Das erzeugte QR-Bild ist hier.
Die SVG-Konvertierung ist nur für Java SE verfügbar.
Android ist nicht verfügbar, stattdessen können Sie QR-Bilder in ImageView ohne Dateierzeugung anzeigen
Es scheint, dass QRCode # bitmap
verfügbar ist. (Diesmal nicht verifiziert)
QRGenToSvg.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").svg();
Files.copy(qrCode.toPath(), Paths.get("qrcode.svg"), StandardCopyOption.REPLACE_EXISTING);
Die generierte "qrcode.svg" wird beim Öffnen in Chrome usw. ordnungsgemäß gerendert.
Wenn Sie sich Gedanken über die Bildqualität von QR-Bildern machen oder wenn Sie auf großem Papier strecken und drucken möchten Dies ist hilfreich, da Sie kein großes QR-Bild erstellen müssen.
QR-Bilder werden zusätzlich zur URL für E-Mails, Standortinformationen, WLAN usw. verwendet. Es gibt auch mehrere Schemaobjekte, die Informationen für jedes dieser Datenformate enthalten.
Es scheint, dass "README" insgesamt 16 Schemata unterstützt,
Wenn man sich den Quellcode ansieht, scheint es tatsächlich noch ein paar mehr zu geben.
Es gibt auch KddiAu
. ~~ Zu bewusst! ~~
Ein Schema, das die URL einer Webseite enthält. Sie können http oder eine Zeichenfolge speichern, die mit https beginnt.
Ich denke nicht, dass es notwendig ist, "QRCode :: from" über dieses Objekt zu füttern.
QRGenForUrl.java
Url url = Url.parse("https://qiita.com/nimzo6689");
File qrCode = QRCode.from(url).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png "), StandardCopyOption.REPLACE_EXISTING);
Ein Schema, das E-Mail-Adressen enthält. Sie können eine Zeichenfolge im Format "mailto: email address" speichern.
Vorerst können Sie "neue E-Mail (" mailto: [email protected] ")" schreiben, aber In diesem Fall wird keine Überprüfungsverarbeitung durchgeführt, z. B. ob es sich um eine Zeichenfolge handelt, die mit "mail to:" beginnt Grundsätzlich halte ich es für angebracht, "EMail :: parse" zu verwenden.
QRGenForEmail.java
EMail email = EMail.parse("mailto:[email protected]");
File qrCode = QRCode.from(email).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png "), StandardCopyOption.REPLACE_EXISTING);
Als ich Google Mail als App zum Lesen und Starten ausgewählt habe, wurde die im QR-Bild eingebettete E-Mail-Adresse in An eingegeben.
Ein Schema, das Standortinformationen enthält. Sie können Zeichenfolgen im Format "Geo: Breite, Länge" speichern.
QR-Bilder werden im Allgemeinen verwendet, wenn Sie auf Webinformationen aus Geschäften usw. zugreifen möchten, anstatt sie auf der Website zu verbreiten. Es ist schwer sich eine Szene vorzustellen, in der das QR-Bild der Positionsinformationen verwendet wird. Ich bin gespannt, wie man es benutzt.
QRGenForGeoInfo.java
GeoInfo geoInfo = GeoInfo.parse("geo:35.6761775,139.7173954");
File qrCode = QRCode.from(geoInfo).file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png "), StandardCopyOption.REPLACE_EXISTING);
In dem bei der Überprüfung verwendeten QR-Codeleser werden die Menüs "Karte anzeigen" und "Route suchen" angezeigt Wenn Sie "Karte anzeigen" auswählen, wird die Karte um die relevanten Standortinformationen angezeigt. Wenn Sie "Route suchen" auswählen, wird die Route von Ihrem aktuellen Standort zum entsprechenden Standort auf Google Map angezeigt.
Es wäre schön, wenn das Logo-Bild gut in der Mitte platziert werden könnte.
Recommended Posts