I Introduction
Librairie open source pour générer des codes barres et également en lire
Lien site web : https://github.com/zxing/zxing/
La lecture des codes est particulièrement efficace !!! Possède une « méthode » de type décode « tout ». Pratique pour ne pas chercher longtemps sur ce sujet.
II Avant de coder
Aller sur la page https://github.com/zxing/zxing/wiki/Getting-Started-Developing
Cliquer sur le lien « Maven release repository » puis aller dans le répertoire « core » pour aller récupérer les .jar
Sélectionner la version puis télécharger les fichiers .jar
III Exemple de codes java
III.1 java
Sous l’EDI Netbeans ajouter les fichiers jar suivants :
Exemple d’écriture et de lecture de codes (lecture QRcode et EAN13 et lecture QRcode)
[pastacode lang= »java » manual= »package%20zxing_test1%3B%0A%0Aimport%20com.google.zxing.BarcodeFormat%3B%0Aimport%20com.google.zxing.BinaryBitmap%3B%0Aimport%20com.google.zxing.ChecksumException%3B%0Aimport%20com.google.zxing.FormatException%3B%0Aimport%20com.google.zxing.MultiFormatReader%3B%0Aimport%20com.google.zxing.NotFoundException%3B%0Aimport%20com.google.zxing.RGBLuminanceSource%3B%0Aimport%20com.google.zxing.Result%3B%0Aimport%20com.google.zxing.WriterException%3B%0Aimport%20com.google.zxing.common.BitMatrix%3B%0Aimport%20com.google.zxing.common.HybridBinarizer%3B%0Aimport%20com.google.zxing.qrcode.QRCodeWriter%3B%0Aimport%20java.awt.image.BufferedImage%3B%0Aimport%20java.io.File%3B%0Aimport%20java.io.IOException%3B%0Aimport%20javax.imageio.ImageIO%3B%0A%0A%2F**%0A%20*%20%40author%20Union31xh%0A%20*%2F%0Apublic%20class%20Zxing_test1%20%7B%0A%0A%20%20%20%2F%2F%20—————————-%0A%20%20%20%2F%2F%20Cr%C3%A9er%20un%20QR-CODE%0A%20%20%20%2F%2F%20—————————-%20%0A%20%20%20public%20static%20void%20writeQRCode(String%20texte)%20throws%20IOException%20%7B%0A%20%20%20%20QRCodeWriter%20writer%20%3D%20new%20QRCodeWriter()%3B%0A%20%20%20%20int%20width%20%3D%20256%2C%20height%20%3D%20256%3B%0A%20%20%20%20BufferedImage%20image%20%3D%20new%20BufferedImage(width%2C%20height%2C%20BufferedImage.TYPE_INT_RGB)%3B%20%2F%2F%20create%20an%20empty%20image%0A%20%20%20%20int%20white%20%3D%20255%20%3C%3C%2016%20%7C%20255%20%3C%3C%208%20%7C%20255%3B%0A%20%20%20%20int%20black%20%3D%200%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20BitMatrix%20bitMatrix%20%3D%20writer.encode(texte%2C%20BarcodeFormat.QR_CODE%2C%20width%2C%20height)%3B%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20width%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20j%20%3D%200%3B%20j%20%3C%20height%3B%20j%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20image.setRGB(i%2C%20j%2C%20bitMatrix.get(i%2C%20j)%20%3F%20black%20%3A%20white)%3B%20%2F%2F%20set%20pixel%20one%20by%20one%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ImageIO.write(image%2C%20%22jpg%22%2C%20new%20File(%22dynamsoftbarcode.jpg%22))%3B%20%2F%2F%20save%20QR%20image%20to%20disk%0A%20%20%20%20%20%20%20%20%7D%20catch%20(IOException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%20(WriterException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%7D%0A%7D%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%2F%2F%20—————————-%0A%20%20%20%2F%2F%20lire%20tout%20type%20de%20code%0A%20%20%20%2F%2F%20————————-%0Apublic%20static%20String%20readQRCode(String%20fileName)%20throws%20ChecksumException%2C%20FormatException%20%7B%0A%20%20%20%20File%20file%20%3D%20new%20File(fileName)%3B%0A%20%20%20%20BufferedImage%20image%20%3D%20null%3B%0A%20%20%20%20BinaryBitmap%20bitmap%20%3D%20null%3B%0A%20%20%20%20Result%20result%20%3D%20null%3B%0A%20%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20image%20%3D%20ImageIO.read(file)%3B%0A%20%20%20%20%20%20%20%20int%5B%5D%20pixels%20%3D%20image.getRGB(0%2C%200%2C%20image.getWidth()%2C%20image.getHeight()%2C%20null%2C%200%2C%20image.getWidth())%3B%0A%20%20%20%20%20%20%20%20RGBLuminanceSource%20source%20%3D%20new%20RGBLuminanceSource(image.getWidth()%2C%20image.getHeight()%2C%20pixels)%3B%0A%20%20%20%20%20%20%20%20bitmap%20%3D%20new%20BinaryBitmap(new%20HybridBinarizer(source))%3B%0A%20%20%20%20%7D%20catch%20(IOException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%7D%0A%20%0A%20%20%20%20if%20(bitmap%20%3D%3D%20null)%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%0A%20%20%20%20%2F%2FQRCodeReader%20reader%20%3D%20new%20QRCodeReader()%3B%20%20%20%0A%20%20%20%20MultiFormatReader%20reader%20%3D%20new%20MultiFormatReader()%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20result%20%3D%20reader.decode(bitmap)%3B%0A%20%20%20%20%20%20%20%20return%20result.getText()%3B%0A%20%20%20%20%7D%20catch%20(NotFoundException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%7D%20%2F*%20catch%20(ChecksumException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%7D%20catch%20(FormatException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20Auto-generated%20catch%20block%0A%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%7D%0A%20%20%20%20*%2F%0A%20%0A%20%20%20%20return%20null%3B%0A%7D%0A%20%20%20%0A%0A%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20throws%20WriterException%2C%20IOException%2C%20ChecksumException%2C%20FormatException%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%20code%20application%20logic%20here%0A%20%20%20%20%20%20%20%20writeQRCode(%22long%20texte%20de%20Union31xh%20h%C3%A9h%C3%A9%20!!!%20C’est%20tr%C3%A8s%20bien%20tout%20%C3%A7a%20!!!!%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20String%20texte%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20texte%20%3D%20readQRCode(%22exemple_qrcode.png%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22R%C3%A9sultat%20%3A%20%22%20%2B%20texte)%3B%0A%0A%20%20%20%20%20%20%20%20texte%20%3D%20readQRCode(%22qrcode_test1.jpg%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22R%C3%A9sultat%20%3A%20%22%20%2B%20texte)%3B%0A%0A%20%20%20%20%20%20%20%20texte%20%3D%20readQRCode(%22qrcode_test2.jpg%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22R%C3%A9sultat%20%3A%20%22%20%2B%20texte)%3B%0A%0A%20%20%20%20%20%20%20%20texte%20%3D%20readQRCode(%22qrcode_test3.png%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22R%C3%A9sultat%20%3A%20%22%20%2B%20texte)%3B%0A%0A%20%20%20%20%20%20%20%20texte%20%3D%20readQRCode(%22exemple_code_barre.png%22)%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22R%C3%A9sultat%20%3A%20%22%20%2B%20texte)%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.out.println(%22–%3E%20Fin%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%0A%20%20%20%20%0A%7D%0A » message= » » highlight= » » provider= »manual »/]
III.2 java android
Le code va récupérer une image stockée dans un « ImageView ».
Dans Android studio il faut mettre dans le répertoire Projet/app/libs du projet les fichiers jar suivants :
- core-3.3.0.jar
- core-3.3.0-javadoc.jar
Puis déclarer les dépendances dans le projet :
Ecriture d’un Qrcode :
[pastacode lang= »java » manual= »%20%20%20%20%2F%2F%20——————-%0A%20%20%20%20%2F%2F%20G%C3%A9n%C3%A8re%20un%20qrcode%20dans%20un%20Imageview%0A%20%20%20%20%2F%2F%20——————–%0A%20%20%20%20public%20void%20Genere_QRCode(String%20texte)%20%7B%0A%0A%20%20%20%20%20%20%20%20ImageView%20mImageView%20%3D%20(ImageView)%20findViewById(R.id.mimageView)%3B%0A%0A%20%20%20%20%20%20%20%20QRCodeWriter%20writer%20%3D%20new%20QRCodeWriter()%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20width%20%3D%20mImageView.getWidth()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20height%20%3D%20mImageView.getHeight()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20BitMatrix%20bitMatrix%20%3D%20writer.encode(texte%2C%20BarcodeFormat.QR_CODE%2C%20width%2C%20height)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Bitmap%20bitmap%20%3D%20Bitmap.createBitmap(width%2C%20height%2C%20Bitmap.Config.ARGB_8888)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20width%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20j%20%3D%200%3B%20j%20%3C%20height%3B%20j%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bitmap.setPixel(i%2C%20j%2C%20bitMatrix.get(i%2C%20j)%20%3F%20Color.BLACK%3A%20Color.WHITE)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20mImageView.setImageBitmap(bitmap)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(WriterException%20e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%0A%20%20%20%20%7D » message= » » highlight= » » provider= »manual »/]
Lecture d’un code :
[pastacode lang= »java » manual= »%20%20%20%20%2F%2F%20——————–%0A%20%20%20%20%2F%2F%20Lit%20un%20code%20barre%20par%20exempe%0A%20%20%20%20%2F%2F%20———————%0A%20%20%20%20public%20void%20Lecture_QRCode()%20throws%20NotFoundException%20%7B%0A%0A%20%20%20%20%20%20%20%20MultiFormatReader%20reader%20%3D%20new%20MultiFormatReader()%3B%0A%20%20%20%20%20%20%20%20ImageView%20mImageView%20%3D%20(ImageView)%20findViewById(R.id.mimageView)%3B%0A%20%20%20%20%20%20%20%20int%20top%20%3D%200%3B%0A%20%20%20%20%20%20%20%20int%20left%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20BitmapDrawable%20drawable%20%3D%20(BitmapDrawable)%20mImageView.getDrawable()%3B%0A%20%20%20%20%20%20%20%20Bitmap%20bitmap%20%3D%20drawable.getBitmap()%3B%0A%0A%20%20%20%20%20%20%20%20int%20width%20%3D%20bitmap.getWidth()%3B%0A%20%20%20%20%20%20%20%20int%20height%20%3D%20bitmap.getHeight()%3B%0A%20%20%20%20%20%20%20%20int%5B%5D%20pixels%20%3D%20new%20int%5Bwidth%20*%20height%5D%3B%0A%20%20%20%20%20%20%20%20bitmap.getPixels(pixels%2C%200%2C%20width%2C%200%2C%200%2C%20width%2C%20height)%3B%0A%20%20%20%20%20%20%20%20%2F%2Fbitmap.recycle()%3B%0A%20%20%20%20%20%20%20%20%2F%2Fbitmap%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20RGBLuminanceSource%20source%20%3D%20new%20RGBLuminanceSource(width%2C%20height%2C%20pixels)%3B%0A%20%20%20%20%20%20%20%20BinaryBitmap%20bBitmap%20%3D%20new%20BinaryBitmap(new%20HybridBinarizer(source))%3B%0A%20%20%20%20%20%20%20%20Result%20resultat_scan%3B%0A%20%20%20%20%20%20%20%20resultat_scan%20%3D%20reader.decode(bBitmap)%3B%0A%20%20%20%20%20%20%20%20if%20(resultat_scan%20!%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(this%2C%20%22R%C3%A9sultat%20%3A%22%20%2B%20resultat_scan.getText()%2C%20Toast.LENGTH_SHORT).show()%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%0A%20%20%20%20%7D » message= » » highlight= » » provider= »manual »/]