2009-07-16 5 views

Répondre

26

Mercer - non, il y a aussi un encodeur dans la bibliothèque. com.google.zxing.qrcode.encoder. Nous fournissons cela en plus d'un exemple d'application web utilisant les API Google Chart

+0

ok merci! Je dois juste créer une image en utilisant le qrCode.getMatrix(). getArray(); – oneeyejack

+7

Dans le cas où quelqu'un d'autre fait cela, voici l'idée de base. Utilisez Encoder.encode() pour «compléter» les détails d'un QRCode nouvellement instancié. Ensuite, récupérez le byte [] [] de QRCode.getMatrix(). GetArray() comme suggéré ci-dessus. Chaque ligne d'octets semble être une ligne de pixels pour le QRCode, chaque octet étant égal à zéro ou à un. À ce stade, vous pouvez simplement peindre les pixels d'une image tamponnée ou en faire un raster ou quelque chose pour le transformer en une image AWT. – CarlG

+11

... ou utilisez la classe fournie MatrixToImageWriter pour faire tout cela pour vous! –

14

ZXing est une bibliothèque de traitement d'image de code à barres 1D/2D open-source multi-format implémentée en Java. Il est publié sous la licence Apache, de sorte qu'il permet l'utilisation du code source pour le développement de logiciels propriétaires ainsi que des logiciels libres et open source.

+1

Ne génère pas de codes QR. Il les scanne seulement. –

+2

Dans leur exemple d'application Web du générateur qr, ils utilisent http://code.google.com/apis/chart/types.html#qrcodes pour générer le code qr. –

+0

Je ne peux pas accéder au Web du projet, donc pas d'API google ou de service web. – oneeyejack

2

MatrixToImageWriter utilise BitMatrix, pas ByteMatrix comme retourné par QRCode.getMatrix. en regardant sourcecode android, j'ai trouvé la preuve suivante de solution concept:

try { 
     MultiFormatWriter writer = new MultiFormatWriter();  
     Hashtable hints = new Hashtable(); 
     hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);    
     MatrixToImageWriter.writeToFile(writer.encode("hello world", BarcodeFormat.QR_CODE, 800, 800, hints), 
             "png", new File("/tmp/qrcode.png")); 
    } catch (Exception e) { 
     System.out.println("failure: " + e); 
    } 

BTW imposant Hashtable dans l'API est pas propre. veuillez utiliser la carte. peu de gens utilisent encore Hashtable de toute façon, vous devriez presque toujours utiliser HashMap à la place (sauf quelques cas d'utilisation).

+0

En réponse à ce très vieux commentaire, je viens de voir: il utilisait 'Hashtable' pour la compatibilité avec J2ME, qui n'a pas' Map'. Mais depuis le support de la version 2.0 J2ME a été abandonnée et l'API prend une 'Map'. –

Questions connexes