Utilisez le lot ZXing pour générer un code QR à la position spécifiée de l'image d'arrière-plan de la carte préparée et placez le contenu texte spécifié (adresse de liaison, texte, etc.) et placez-le dans cette position, et enfin ajoutez le numéro de carte.
étape:
1). Faites une image d'arrière-plan comme indiqué ci-dessous:
2). Générez l'objet BufferedImage de code QR. Le code est le suivant:
/ ** * * @Title: TobufferedImage * @Description: Convertir le texte en objet d'image du code QR * @param text * QR Code Contenu * @param Width * QR Code Height * @Param Height * Width à deux chiffres * @param * @param exception * Set File Exception {int noir = 0xff000000; int blanc = 0xffffffff; HashTable <EncodeHintType, Object> hins = new HashTable <EncodeHintType, Object> (); hint.put (encodeHintType.Character_set, "UTF-8"); // Le codage du jeu de caractères utilisé par le contenu est indice. BitMatrix Matrix = new MultiformatWriter (). Encode (texte, BarcodeFormat.qr_code, largeur, hauteur, indices); BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); pour (int x = 0; x <largeur; x ++) {pour (int y = 0; y <hauteur; y ++) {image.setrgb (x, y, matrix.get (x, y)? noir: blanc); }} Retour image; }3). Générer un code QR à la position spécifiée de l'image d'arrière-plan de la carte, le code est le suivant:
/ ** * * @Title: MarkImageByCode * @Description: Ajoutez du code QR à la position spécifiée de l'image * @param img * QR Code Image Object * @param positionwidth * Position Horizontal Coordonnée * @Param PositionHeight * Position Vertical Coordate * void markImageBycode (image img, string srcimgPath, String TargetPath, int positionwidth, int positionHeight) {outputStream os = null; try {image srcimg = imageo.read (nouveau fichier (srcimgpath)); BufferedImage BuffImg = new BufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedImage.type_int_rgb); // 1. Obtenez l'objet Brush Graphics2d G = Buffimg.CreateGraphics (); // 2. Définissez le traitement des bords de déchaînement du segment de ligne g.setRenderingHint (RenderingHint.key_interpolation, RenderingHint.value_interpolation_bilinear); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // 3. Emplacement du code QR G.DRAWIMAGE (IMG, PositionWidth, PositionHeight, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 4. Libérez la ressource g.dispose (); // 5. Générer l'image (il est recommandé de générer PNG, JPG sera déformé) OS = new FileOutputStream (TargerPath); Imageo.write (buffimg, "png", os); System.out.println ("QR Code Génération d'images réussi"); } catch (exception e) {e.printStackTrace (); } enfin {try {if (null! = os) os.close (); } catch (exception e) {e.printStackTrace (); }}} 4). Ajouter un numéro de carte à la carte
/ ** * * @Title: PressText * @Description: Ajoutez du texte à la position spécifiée de l'image * @param prestext * Contenu texte * @param srciMageFile * Image d'origine * @param DestimageFile * Image cible * @param x * Horizontal Coordonate appuyez surxt (String PressText, String srciageFile, String DesMageFile, int x, int y, float alpha) {try {file img = new File (srciageFile); Image src = imageo.read (img); int width = src.getWidth (null); int height = src.GetHeight (null); BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); Graphics2d g = image.creategraphics (); // Open Text Anti-Aliasing pour supprimer le glitch de texte g.setRenderingHint (RenderingHints.key_text_antialiasing, RenderingHint.value_text_antialias_on); G.DrawImage (src, 0, 0, largeur, hauteur, null); // Définir la couleur g.setColor (nouvelle couleur (89, 87, 87)); // Set Font g.setfont (New Font ("Fangzheng Lanting Black_gbk", Font.Bold, 14)); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // Le premier paramètre -> Définir le contenu, les deux paramètres suivants -> Position coordonnée du texte sur l'image (x, y). G.Drawstring (PressText, X, Y); g.dispose (); ImageIo.Write ((BufferedImage) Image, "Png", nouveau fichier (DestImageFile)); // Sortie à File Stream} Catch (Exception E) {e.printStackTrace (); }} Exemple:
Code:
Code de test
classe publique CodeTest {public static void main (String [] args) lève une exception {String text = "http://www.xxx.com/"; // CODE QR Contenu // Générer le code QR // Générer le code QR d'image pour stocker la chaîne de répertoire TargetPath = "f: / qrcode / cibleMg /" + utils.toStr (); // Créer un répertoire utils.makedirs (TargetPath); int début = 100; // Code Démarrer le numéro int end = 101; // Code End Number for (int i = begin; i <= end; i ++) {// générer des nombres à 16 chiffres avec des dates, telles que 20161214000001 String Code = utils.tostr () + utils.formateNumber (i); // Obtenez l'image de BufferedImage de l'objet QR Code = utils.tobufferedImage (texte + "? Paycode =" + code, 240,240); // Générez une image d'une carte standard avec une image d'arrière-plan + QR Code utils.markimageBycode (image, "f: /qrcode/srcimg/src.png", ciblePath + "/" + code + ".png", 340, 160); // Ajouter le numéro de code de la carte debout à la figure utils.pressText (code, ciblePath + "/" + code + ".png", ciblePath + "/" + code + ".png", 390, 417, 0,5f); } // générer du code QR}} Effet:
Les rendus d'image générés par lots sont les suivants
Image par lots:
Code utilise:
package cn.utils.code; import java.awt.alphacomposite; import java.awt.color; Importer java.awt.font; import java.awt.graphics2d; import java.awt.image; Importer java.awt.RenderingHints; Importer java.awt.image.bufferedImage; Importer java.io.file; Importer java.io.fileOutputStream; import java.io.outputStream; import java.text.decimalformat; import java.text.simpledateFormat; Importer java.util.date; import java.util.hashTable; import javax.imageio.imageio; import com.google.zxing.barcodeFormat; import com.google.zxing.encodeHintType; import com.google.zxing.multiformatwriter; import com.google.zxing.common.bitmatrix; / ** Classe d'outils. * / public abstrait class utils {/ ** Format de date: yyyy-mm-dd hh: mm: ss * / public static String df_datetime = "yyyymmdd"; Float statique privé alpha = 1f; / ** * * @Title: TobufferedImage * @Description: Convertir le texte en objet d'image du code QR * @param text * QR Code Contenu * @param Width * QR Code Height * @Param Height * Width à deux chiffres * @param * @param exception * Set File Exception {int noir = 0xff000000; int blanc = 0xffffffff; HashTable <EncodeHintType, Object> hins = new HashTable <EncodeHintType, Object> (); hint.put (encodeHintType.Character_set, "UTF-8"); // Le codage du jeu de caractères utilisé par le contenu est indice. BitMatrix Matrix = new MultiformatWriter (). Encode (texte, BarcodeFormat.qr_code, largeur, hauteur, indices); BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); pour (int x = 0; x <largeur; x ++) {pour (int y = 0; y <hauteur; y ++) {image.setrgb (x, y, matrix.get (x, y)? noir: blanc); }} Retour image; } / ** * * @Title: MarkImageByCode * @Description: Ajoutez du code QR à la position spécifiée de l'image * @param img * QR Code Image Object * @param positionwidth * position Horizontal Coordonne * @param PositionEight * Position COODINDINE VERTICAL * static void markImageBycode (image img, string srcimgPath, String TargetPath, int positionwidth, int positionHeight) {outputStream os = null; try {image srcimg = imageo.read (nouveau fichier (srcimgpath)); BufferedImage BuffImg = new BufferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedImage.type_int_rgb); // 1. Obtenez l'objet Brush Graphics2d G = Buffimg.CreateGraphics (); // 2. Définissez le traitement des bords de déchaînement du segment de ligne g.setRenderingHint (RenderingHint.key_interpolation, RenderingHint.value_interpolation_bilinear); G.DrawImage (srcimg.getScaledInstance (srcimg.getWidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // 3. Emplacement du code QR G.DRAWIMAGE (IMG, PositionWidth, PositionHeight, NULL); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 4. Libérez la ressource g.dispose (); // 5. Générer une image (il est recommandé de générer PNG, JPG sera déformé) OS = new FileOutputStream (TargerPath); Imageo.write (buffimg, "png", os); System.out.println ("QR Code Génération d'images réussi"); } catch (exception e) {e.printStackTrace (); } enfin {try {if (null! = os) os.close (); } catch (exception e) {e.printStackTrace (); }}} / ** * * @Title: PressText * @Description: Ajoutez du texte à la position spécifiée de l'image * @param prestext * Contenu texte * @param srciMageFile * Image d'origine * @param DestimageFile * Image cible * @param x * coordonnée horizontale * @param y * coordonnée verticale * @param alpha * Transparency * @rerurn vocons * @throws * @param alpha * transparency * public final static void prestext (string pressText, string srciagefile, string détimagefile, int x, int y, float alpha) {try {file img = new file (srciMageFile); Image src = imageo.read (img); int width = src.getWidth (null); int height = src.GetHeight (null); BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); Graphics2d g = image.creategraphics (); // Open Text Anti-Aliasing pour supprimer le glitch de texte g.setRenderingHint (RenderingHints.key_text_antialiasing, RenderingHint.value_text_antialias_on); G.DrawImage (src, 0, 0, largeur, hauteur, null); // Définir la couleur g.setColor (nouvelle couleur (89, 87, 87)); // Set Font g.setfont (New Font ("Fangzheng Lanting Black_gbk", Font.Bold, 14)); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // Le premier paramètre -> le contenu de définition, les deux paramètres suivants -> La position de coordonnée du texte sur l'image (x, y). G.Drawstring (PressText, X, Y); g.dispose (); ImageIo.Write ((BufferedImage) Image, "Png", nouveau fichier (DestimageFile)); // sortie en flux de fichiers} catch (exception e) {e.printStackTrace (); }} // Date vers String / ** Format La date en tant que chaîne, le format par défaut est yyyy-mm-dd hh: mm: ss, la date par défaut est la date actuelle. * / public static String toStr () {return toStr (df_dateTime); } / ** Format La date en tant que chaîne, le format est spécifié par le format de paramètre, la date par défaut est la date actuelle, la valeur de format peut être utilisée dans les constantes de cette classe ou personnalisées. * / public static String toStr (chaîne Format) {return toStr (format, new Date ()); } / ** Format La date en tant que chaîne, le format par défaut est yyyy-mm-dd hh: mm: ss, la date est spécifiée par la date du paramètre. * / Public Static String TOSTR (date de date) {return toStr (df_datetime, date); } / ** Format La date en tant que chaîne, le format est spécifié par le format de paramètre et la date est spécifiée par la date du paramètre. La valeur de format peut être utilisée dans les constantes de cette classe ou personnalisées. * / public static String tostr (Format de chaîne, date de date) {return new SimpledateFormat (format) .format (date); } public static String FormatNumber (int num) {decimalformat df = new decimalformat ("000000"); String str2 = df.format (num); retour str2; } public static String FormatNumber (int num) {decimalformat df = new decimalformat ("000000"); String str2 = df.format (num); retour str2; } public static boolean makedirs (String filepath) {fichier dossier = new file (filepath); return (dossier.exists () && dossier.isdirectory ())? vrai: dossier .mkDirs (); }} Techniques utilisées:
1. Utilisez l'outil ZXing pour générer du code QR.
1) Télécharger l'adresse: http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/
2) Configuration.
<dependency> <proupId> com.google.zxing </rompuprid> <letifactive> noyau </ artifactive> <version> 2.2 </ version> </dependency>
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.