J'ai besoin de créer un QR Code dans mon application Android et j'ai besoin d'une bibliothèque ou d'un code source qui me permet de créer un QR Code dans une application Android.
La bibliothèque dont j'ai besoin doit:
- ne pas laisser de filigrane (comme la
onbarcode
bibliothèque) - ne pas utiliser l'API de service Web pour créer le qrcode (comme la bibliothèque de Google zxing)
- pas besoin d'installateurs tiers (comme QR Droid)
J'ai déjà créé un tel code pour iPhone (Objective-C) mais j'ai besoin d'une solution rapide pour Android jusqu'à ce que j'aie le temps de créer mon propre générateur de code QR. C'est mon premier projet Android, donc toute aide sera appréciée.
Réponses:
Avez-vous examiné ZXING ? Je l'ai utilisé avec succès pour créer des codes à barres. Vous pouvez voir un exemple de travail complet dans l' application bitcoin src
// this is a small sample use of the QRCodeEncoder class from zxing try { // generate a 150x150 QR code Bitmap bm = encodeAsBitmap(barcode_content, BarcodeFormat.QR_CODE, 150, 150); if(bm != null) { image_view.setImageBitmap(bm); } } catch (WriterException e) { //eek }
la source
avec zxing c'est mon code pour créer un QR
QRCodeWriter writer = new QRCodeWriter(); try { BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, 512, 512); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bmp.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE); } } ((ImageView) findViewById(R.id.img_result_qr)).setImageBitmap(bmp); } catch (WriterException e) { e.printStackTrace(); }
la source
Bitmap.createBitmap
.Peut-être que ce vieux sujet, mais j'ai trouvé que cette bibliothèque est très utile et facile à utiliser
QRGen
exemple pour l'utiliser dans Android
Bitmap myBitmap = QRCode.from("www.example.org").bitmap(); ImageView myImage = (ImageView) findViewById(R.id.imageView); myImage.setImageBitmap(myBitmap);
la source
implementation 'com.github.kenglxn.QRGen:android:[version]'
et importer la classeimport net.glxn.qrgen.android.QRCode
Voici ma fonction simple et fonctionnelle pour générer un Bitmap! J'utilise uniquement ZXing1.3.jar! J'ai également réglé le niveau de correction sur Élevé!
PS: x et y sont inversés, c'est normal, car bitMatrix inverse x et y. Ce code fonctionne parfaitement avec une image carrée.
public static Bitmap generateQrCode(String myCodeText) throws WriterException { Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>(); hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // H = 30% damage QRCodeWriter qrCodeWriter = new QRCodeWriter(); int size = 256; ByteMatrix bitMatrix = qrCodeWriter.encode(myCodeText,BarcodeFormat.QR_CODE, size, size, hintMap); int width = bitMatrix.width(); Bitmap bmp = Bitmap.createBitmap(width, width, Bitmap.Config.RGB_565); for (int x = 0; x < width; x++) { for (int y = 0; y < width; y++) { bmp.setPixel(y, x, bitMatrix.get(x, y)==0 ? Color.BLACK : Color.WHITE); } } return bmp; }
ÉDITER
Il est plus rapide d'utiliser bitmap.setPixels (...) avec un tableau pixel int au lieu de bitmap.setPixel un par un:
BitMatrix bitMatrix = writer.encode(inputValue, BarcodeFormat.QR_CODE, size, size); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? BLACK : WHITE; } } bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
la source
J'ai utilisé le jar zxing-1.3 et j'ai dû faire quelques changements en implémentant le code d'autres réponses, donc je laisserai ma solution pour d'autres. J'ai fait ce qui suit:
1) trouvez zxing-1.3.jar, téléchargez-le et ajoutez des propriétés (ajoutez un pot externe).
2) dans ma présentation d'activité, ajoutez ImageView et nommez-le (dans mon exemple, c'était tnsd_iv_qr).
3) inclure du code dans mon activité pour créer une image qr (dans cet exemple, je créais un QR pour les paiements bitcoin):
QRCodeWriter writer = new QRCodeWriter(); ImageView tnsd_iv_qr = (ImageView)findViewById(R.id.tnsd_iv_qr); try { ByteMatrix bitMatrix = writer.encode("bitcoin:"+btc_acc_adress+"?amount="+amountBTC, BarcodeFormat.QR_CODE, 512, 512); int width = 512; int height = 512; Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (bitMatrix.get(x, y)==0) bmp.setPixel(x, y, Color.BLACK); else bmp.setPixel(x, y, Color.WHITE); } } tnsd_iv_qr.setImageBitmap(bmp); } catch (WriterException e) { //Log.e("QR ERROR", ""+e); }
Si quelqu'un se demande, la variable "btc_acc_adress" est une chaîne (avec une adresse BTC), amountBTC est un double, avec, bien sûr, le montant de la transaction.
la source
zxing ne fournit pas (seulement) une API Web; vraiment, c'est Google qui fournit l'API, à partir du code source qui a ensuite été open-source dans le projet.
Comme Rob le dit ici, vous pouvez utiliser le code source Java pour l'encodeur de code QR pour créer un code-barres brut, puis le rendre sous forme de bitmap.
Je peux encore offrir un moyen plus simple. Vous pouvez appeler Barcode Scanner par intention pour encoder un code-barres. Vous n'avez besoin que de quelques lignes de code et de deux classes du projet, sous
android-integration
. Le principal est IntentIntegrator . AppelezshareText()
.la source
java.awt
ou ne se connecte pas au Web, et vous pouvez le voir utilisé dans l'application Barcode Scanner - sur Android, sans connexion Internet. @Razgriz non il ne renvoie pas l'image, mais montre l'image à l'écran pour vous. L'utilisateur peut enregistrer l'image.