Verwenden Sie Zxing -Batch, um einen QR -Code an der angegebenen Position des vorbereiteten Kartenhintergrundbildes zu generieren und den angegebenen Textinhalt (Linkadresse, Text usw.) zu platzieren, und platzieren Sie ihn in dieser Position und fügen Sie schließlich die Kartennummer hinzu.
Schritt:
1). Machen Sie ein Hintergrundbild wie unten gezeigt:
2). Generieren Sie das QR -Code BufferedImage -Objekt. Der Code ist wie folgt:
/ ** * * @title: tobufedImage * @Description: Text in QR-Code-Bild-Objekt umwandeln Ausnahme {int schwarz = 0xff000000; int weiß = 0xffffffff; Hashtable <CodesHintType, Object> Hints = new Hashtable <encodeHintType, Object> (); Hints.put (EncodehintType.character_set, "utf-8"); // Die vom Inhalt verwendete Zeichensatz -Codierung lautet tipps.put (EncodeHintType.Margin, 1); Bitmatrix matrix = new multiformatWriter (). Codem (text, barcodeFormat.qr_code, width, Höhe, Hinweise); Bufferedimage image = new bufferedImage (width, Höhe, bufferedimage.type_int_rgb); für (int x = 0; x <width; x ++) {für (int y = 0; y <Höhe; y ++) {image.setRGB (x, y, matrix.get (x, y)? schwarz: weiß); }} return Image; }3). Generieren Sie einen QR -Code an der angegebenen Position des Kartenhintergrundbildes. Der Code lautet wie folgt:
/** * * @Title: markImageByCode * @Description: Add QR code to the specified position of the image* @param img * QR code image object* @param srcImgPath * Background image* @param targetPath * Target map* @param positionWidth * Position horizontal coordinate* @param positionHeight * Position vertical coordinate* @return void Return type* @throws */ public static void MarkimageByCode (Bild img, String srcimgPath, String -ZielPath, int PositionWidth, int PositionHeight) {outputStream os = null; try {image srcimg = imageio.read (neue Datei (srcimgPath)); Bufferedimage buffimg = new bufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Holen Sie sich das Pinselobjekt Graphics2d g = buffimg.createGraphics (); // 2. Setzen Sie die zackige Kantenverarbeitung des Leitungssegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.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. QR -Codesposition G.Drawimage (IMG, Positionsbreite, PositionHeight, NULL); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)); // 4. Veröffentlichen Sie die Ressource G. Dispose (); // 5. Bild generieren (es wird empfohlen, PNG zu generieren, JPG wird verzerrt) os = new FileOutputStream (TargerPath); Imageio.Write (Buffimg, "PNG", OS); System.out.println ("QR -Code -Bild -Generierung erfolgreich"); } catch (Ausnahme e) {e.printstacktrace (); } endlich {try {if (null! = os) os.close (); } catch (Ausnahme e) {e.printstacktrace (); }}} 4). Fügen Sie der Karte eine Kartennummer hinzu
/** * * @Title: pressText * @Description: Add text to the specified position of the image* @param pressText * Text content* @param srcImageFile * Original image* @param destImageFile * Target image* @param x * horizontal coordinate* @param y * vertical coordinate* @param alpha * Transparency* @return void Return type* @throws */ public final static void pressText (String pressTeText, String srcimageFile, String destimageFile, int x, int y, float alpha) {try {file img = neue Datei (srcimageFile); Bild src = imageio.read (IMG); int width = src.getwidth (null); int height = src.getheight (null); Bufferedimage image = new bufferedImage (width, Höhe, bufferedimage.type_int_rgb); Graphics2d g = Bild.CreateGraphics (); // Text gegen Aliasing öffnen, um den Text Glitch G.SetrenderingHint zu entfernen (renderingHints.key_text_antialiasing, renderingHints.value_text_antialias_on); G.Drawimage (SRC, 0, 0, Breite, Höhe, Null); // Color G.SetColor (neue Farbe (89, 87, 87) festlegen); // Schriftart G.SetFont (neue Schriftart ("Fangzheng Lanting Black_gbk", font.bold, 14)); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Alpha)); // Der erste Parameter -> Inhalt festlegen, die nächsten beiden Parameter -> Koordinatenposition des Textes auf dem Bild (x, y). g.drawstring (pressText, x, y); g.disponse (); Imageio.Write ((bufferedImage) Bild, "PNG", neue Datei (DestimageFile)); // Ausgabe zum Dateistrom} catch (Ausnahme E) {E. printstacktrace (); }} Beispiel:
Code:
Testcode
public class codetest {public static void main (String [] args) löst Ausnahme aus {String text = "http://www.xxx.com/"; // QR -Code -Inhalt // QR -Code generieren // Bild QR -Code für den Verzeichnis String targetPath = "f:/qrcode/targetImg/" + utils.toStr () generieren; // Verzeichnis utils.makedirs (TargetPath) erstellen; int begin = 100; // Code startnummer int End = 101; // Code-Endnummer für (int i = start; i <= end; i ++) {// generieren Sie 16-Grad-Nummern mit Daten, wie z. // Erhalten Sie das QR -Code -Objekt BufferedImage Image = utils.tobuffenedImage (Text + "? Paycode =" + code, 240,240); // generieren Sie ein Bild einer stehenden Karte mit einem Hintergrundbild + QR -Code utils.markimageByCode (Bild, "f: /qrcode/srcimg/src.png", targetPath + "/" + code + ".png", 340, 160); // Die Codenummer der Standkarte der Abbildung utilstext (Code, TargetPath + "/" + code + ".png", targetPath + "/" + code + ".png", 390, 417, 0,5F) hinzufügen; } // QR -Code generieren}} Wirkung:
Die batchgenerierten Bildrenderungen sind wie folgt
Batch -Bild:
Utils -Code:
Paket cn.utils.code; Import Java.awt.Alphacomposite; Import Java.awt.Color; import Java.awt.font; Import Java.awt.Graphics2d; import Java.awt.image; importieren java.awt.renderingHINDINTS; Import Java.awt.image.BuffenedImage; Import Java.io.file; importieren java.io.fileoutputStream; importieren java.io.outputstream; importieren java.text.decimalformat; Java.Text.SimpledateFormat importieren; import Java.util.date; import Java.util.hashtable; import Javax.imageo.imageo; import com.google.zxing.barcodeFormat; import com.google.zxing.codeHintType; import com.google.zxing.multiformatwriter; import com.google.zxing.common.bitmatrix; /** Werkzeugklasse. */ public abstract Class Utils {/ ** Datumsformat: yyyy-mm-dd hh: mm: ss*/ public static String df_datetime = "yyyymmdd"; privates statisches Float Alpha = 1F; / ** * * @title: tobufedImage * @Description: Text in QR-Code-Bild-Objekt umwandeln Ausnahme {int schwarz = 0xff000000; int weiß = 0xffffffff; Hashtable <CodesHintType, Object> Hints = new Hashtable <encodeHintType, Object> (); Hints.put (EncodehintType.character_set, "utf-8"); // Die vom Inhalt verwendete Zeichensatz -Codierung lautet tipps.put (EncodeHintType.Margin, 1); Bitmatrix matrix = new multiformatWriter (). Codem (text, barcodeFormat.qr_code, width, Höhe, Hinweise); Bufferedimage image = new bufferedImage (width, Höhe, bufferedimage.type_int_rgb); für (int x = 0; x <width; x ++) {für (int y = 0; y <Höhe; y ++) {image.setRGB (x, y, matrix.get (x, y)? schwarz: weiß); }} return Image; } / ** * * @title: markimageByCode * @Description: Fügen Sie QR -Code zur angegebenen Position des Bildes hinzu * @param img * QR -Code Bildobjekt * @param srcimgpath * Hintergrundbild * @param Zielpath * Zielkarte * @param Positionwidth * Position Horizontal Coordinate * | void markimageByCode (Bild img, String srcimgPath, String targetPath, int PositionWidth, int PositionHeight) {outputStream os = null; try {image srcimg = imageio.read (neue Datei (srcimgPath)); Bufferedimage buffimg = new bufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Holen Sie sich das Pinselobjekt Graphics2d g = buffimg.createGraphics (); // 2. Setzen Sie die zackige Kantenverarbeitung des Leitungssegments G.SetRenderingHint (renderingHints.key_interpolation, renderingHints.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. QR -Codesposition G.Drawimage (IMG, Positionsbreite, PositionHeight, NULL); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_over)); // 4. Veröffentlichen Sie die Ressource G. Dispose (); // 5. Generieren Sie ein Bild (es wird empfohlen, PNG zu generieren, JPG wird verzerrt) os = new FileOutputStream (TargerPath); Imageio.Write (Buffimg, "PNG", OS); System.out.println ("QR -Code -Bild -Generierung erfolgreich"); } catch (Ausnahme e) {e.printstacktrace (); } endlich {try {if (null! = os) os.close (); } catch (Ausnahme e) {e.printstacktrace (); } } } /** * * @Title: pressText * @Description: Add text to the specified position of the image* @param pressText * Text content* @param srcImageFile * Original image* @param destImageFile * Target image* @param x * horizontal coordinate* @param y * vertical coordinate* @param alpha * Transparency* @return void Return type* @throws */ public Final static void pressTeText (String pressTeText, String srcimageFile, String destimageFile, int x, int y, float alpha) {try {Datei img = neue Datei (srcimageFile); Bild src = imageio.read (IMG); int width = src.getwidth (null); int height = src.getheight (null); Bufferedimage image = new bufferedImage (width, Höhe, bufferedimage.type_int_rgb); Graphics2d g = Bild.CreateGraphics (); // Text gegen Aliasing öffnen, um den Text Glitch G.SetrenderingHint zu entfernen (renderingHints.key_text_antialiasing, renderingHints.value_text_antialias_on); G.Drawimage (SRC, 0, 0, Breite, Höhe, Null); // Color G.SetColor (neue Farbe (89, 87, 87) festlegen); // Schriftart G.SetFont (neue Schriftart ("Fangzheng Lanting Black_gbk", font.bold, 14)); G.SetComposite (Alphacomposite.getInstance (Alphacomposite.src_atop, Alpha)); // Der erste Parameter -> Der Inhalt festgelegt, die nächsten beiden Parameter -> die Koordinatenposition des Textes auf dem Bild (x, y). g.drawstring (pressText, x, y); g.disponse (); Imageio.Write ((bufferedImage) Bild, "PNG", neue Datei (DestimageFile)); // Ausgabe zum Dateistrom} catch (Ausnahme e) {e.printstacktrace (); }} // Datum an String/** Format das Datum als Zeichenfolge, das Standardformat ist yyyy-mm-dd hh: mm: ss, das Standarddatum ist das aktuelle Datum. */ public static String toStr () {return toStr (df_datetime); } /** Format Das Datum als Zeichenfolge, das Format wird im Parameterformat angegeben. Das Standarddatum ist das aktuelle Datum, der Formatwert kann in Konstanten dieser Klasse oder angepasst werden. */ public static String toStr (String -Format) {return tostr (Format, neues Datum ()); } /** Format Das Datum als Zeichenfolge, das Standardformat ist yyyy-mm-dd hh: mm: ss, das Datum wird nach dem Parameterdatum angegeben. */ public static String toStr (Datum) {return tostr (df_datetime, Datum); } /** Format das Datum als Zeichenfolge, das Format wird durch das Parameterformat angegeben und das Datum wird nach dem Parameterdatum angegeben. Der Formatwert kann in Konstanten dieser Klasse verwendet oder angepasst werden. */ public static String toStr (String -Format, Datumsdatum) {Neue SimpledateFormat (Format) .Format (Datum); } public static String formatNumber (int num) {decimalFormat df = new DecimalFormat ("000000"); String str2 = df.format (num); return str2; } public static String formatNumber (int num) {decimalFormat df = new DecimalFormat ("000000"); String str2 = df.format (num); return str2; } public static boolean makedirs (String filepath) {Dateiordner = neue Datei (filepath); return (order.exists () && order.isdirectory ())? Richtig: Ordner .mkdirs (); }} Verwendete Techniken:
1. Verwenden Sie das ZXing -Tool, um QR -Code zu generieren.
1) Adresse herunterladen: http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/
2) .Maven -Konfiguration
<De vorhöhe> <gruppe> com.google.zxing </Groupid> <artifactID> Core </artifactId> <version> 2.2 </Version> </abhängig>
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.