En parlant de bibliothèques qui créent du code QR en Java, j'ai l'impression que ZXing made by Google est souvent introduit. Quand je l'ai utilisé, j'étais un peu inquiet que le code source paraisse relativement bas.
En gros, ça ressemble à ça.
Code source pour générer des images QR à l'aide de 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 ")));
Cependant, dans la plupart des cas, cela devient plus compliqué en réalité. Par exemple, ajustez les marges, modifiez le code de caractère, passez à une couleur différente au lieu du noir et blanc, etc. De plus, je pense qu'il y a des cas où vous voulez sortir sous forme de fichier SVG afin que la qualité de l'image ne se détériore pas même si vous l'étirez.
Si vous essayez d'atteindre ce qui précède, vous aurez plus de code avec des couches inférieures, Si vous utilisez une bibliothèque appelée QRGen créée en enveloppant ZXing, J'ai récemment appris que vous pouvez facilement écrire un processus pour générer une image QR avec une chaîne de méthodes. J'ai essayé de résumer comment l'utiliser.
Fondamentalement, comme d'habitude pour les outils de gestion de paquets tels que Maven, Gradle Il peut être utilisé en ajoutant une dépendance. Cependant, il y a un point à noter, depuis la version 2.1.0 Nous ne l'avons pas publié dans Maven Central Il est nécessaire d'ajouter jitpack.io au référentiel.
Tel qu'il est sur la page officielle, c'est comme suit dans Gradle.
build.gradle
apply plugin: 'java'
sourceCompatibility = 1.12
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
//Lors de l'utilisation avec Java SE. Sur Android, l'artefactId sera android.
compile 'com.github.kenglxn.QRGen:javase:2.6.0'
}
Avec ZXing, vous devez écrire core et javase, ou android et deux dépendances, Avec QRGen, vous n'en avez besoin que d'un seul pour pouvoir en profiter un peu.
Je publierai le code source que j'ai essayé localement plus tard. Comme son nom l'indique, QRGen est une bibliothèque dédiée à la génération de code QR, donc Il semble que vous deviez utiliser l'API de ZXing si vous souhaitez numériser.
Le code publié dans cet article a été vérifié dans l'environnement suivant.
Windows10 Pro, Java12(AdoptOpenJDK with HotSpot), IntelliJ IDEA 2019
L'exemple de code dans l'article omet l'instruction d'importation, etc., donc si vous souhaitez vérifier l'intégralité du fichier, reportez-vous à Gist.
Assurez-vous également que l'image QR générée peut être lue par l'application Android ici. fait.
Le premier est de savoir comment le créer avec un objet File.
Puisque QRCode # file
crée un fichier image appelé QRCode.png
dans le répertoire temporaire,
Il se déplace vers le chemin où vous souhaitez le sortir.
J'ai spécifié REPLACE_EXISTING
afin de pouvoir écrire sur le même nom de fichier autant de fois que je le souhaite.
QRGenToFile.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").file();
Files.copy(qrCode.toPath(), Paths.get("qrcode.png "), StandardCopyOption.REPLACE_EXISTING);
C'est le même que l'exemple de code que j'ai écrit au début, mais c'est beaucoup plus simple Vous n'avez même pas besoin de connaître l'API ZXing, ce qui la rend plus facile à implémenter et à lire.
Voici l'image QR qui a été réellement générée. Si vous ne spécifiez aucune taille, elle semble être 125x125.
Ensuite, comment créer un objet ByteArrayOutputStream.
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();
}
La quantité de code est plus grande que celle de QRCode # file
,
Par exemple, ʻImageIO.read (new ByteArrayInputStream (qrCode.toByteArray ())) Cela semble être pratique lorsque vous souhaitez générer
BufferedImage` et effectuer une sorte de traitement d'image.
De plus, je ne crée pas de fichier temporaire, donc les performances semblent meilleures.
QRCode # stream
créait un nouveau OutputStream,
Si vous souhaitez écrire une image QR dans un flux de sortie qui a déjà été généré, vous pouvez utiliser QRCode # writeTo
.
QRGenToExistingOs.java
try (OutputStream os = Files.newOutputStream(Paths.get("qrcode.png "))) {
QRCode.from("https://qiita.com/nimzo6689").writeTo(os);
os.flush();
}
Il nécessite moins de description que «QRCode # stream».
Vous pouvez spécifier le format, la taille et la couleur de l'image QR générée. De plus, les paramètres spécifiés dans ʻEncodeHintType` dans ZXing peuvent également être définis via l'objet QRCode.
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);
La valeur spécifiée par withColor
est au format transparence (2 octets) + RVB (6 octets).
L'image QR générée est ici.
La conversion SVG n'est disponible que pour Java SE.
Android n'est pas disponible, mais à la place, vous pouvez afficher des images QR dans ImageView sans génération de fichier
Il semble que QRCode # bitmap
soit disponible. (Non vérifié cette fois)
QRGenToSvg.java
File qrCode = QRCode.from("https://qiita.com/nimzo6689").svg();
Files.copy(qrCode.toPath(), Paths.get("qrcode.svg"), StandardCopyOption.REPLACE_EXISTING);
Le qrcode.svg
généré s'affichera correctement lorsqu'il sera ouvert dans Chrome, etc.
Lorsque vous êtes préoccupé par la qualité d'image des images QR ou lorsque vous souhaitez étirer et imprimer sur du grand papier C'est utile car vous n'avez pas à préparer une grande image QR.
Les images QR sont utilisées pour le courrier, les informations de localisation, le Wifi, etc. en plus de l'URL, Il existe également plusieurs objets Schema qui contiennent des informations pour chacun de ces formats de données.
Il semble que README
supporte un total de 16 schémas,
En regardant le code source, il semble qu'il y en ait en fait quelques autres.
Il y a aussi «KddiAu». ~~ Trop conscient! ~~
Un schéma qui contient l'URL d'une page Web. Vous pouvez stocker http ou une chaîne de caractères commençant par https.
Je ne pense pas qu'il soit nécessaire d'alimenter QRCode :: from
via cet objet.
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);
Un schéma qui contient les adresses e-mail. Vous pouvez stocker une chaîne au format «mailto: adresse e-mail».
Pour le moment, vous pouvez écrire new EMail (" mailto: [email protected] ")
, mais
Dans ce cas, le traitement de vérification tel que s'il s'agit d'une chaîne de caractères commençant par mail to:
n'est pas effectué, donc
Fondamentalement, je pense qu'il est approprié d'utiliser ʻEMail :: parse`.
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);
Lorsque j'ai sélectionné Gmail comme application à lire et à démarrer, l'adresse e-mail intégrée dans l'image QR a été saisie dans À.
Un schéma qui contient des informations de localisation. Vous pouvez stocker des chaînes au format «geo: latitude, longitude».
Les images QR sont généralement utilisées lorsque vous souhaitez accéder à des informations Web à partir de magasins, etc., plutôt que de les distribuer sur le site Web. Il est difficile d'imaginer une scène où l'image QR des informations de position est utilisée. Je suis curieux de savoir comment l'utiliser.
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);
Dans le lecteur de code QR utilisé lors de la vérification, les menus «Afficher la carte» et «Rechercher un itinéraire» sont affichés, et Si vous sélectionnez "Afficher la carte", la carte autour des informations de localisation pertinentes sera affichée. Si vous sélectionnez "Rechercher un itinéraire", l'itinéraire entre votre position actuelle et l'emplacement concerné s'affiche sur Google Map.
Ce serait bien si l'image du logo pouvait être placée au centre d'une bonne manière.
Recommended Posts