Gunakan zxing batch untuk menghasilkan kode QR pada posisi yang ditentukan dari gambar latar belakang kartu yang disiapkan dan tempatkan konten teks yang ditentukan (alamat tautan, teks, dll.) Dan letakkan di posisi itu, dan akhirnya tambahkan nomor kartu.
melangkah:
1). Buat gambar latar belakang seperti yang ditunjukkan di bawah ini:
2). Hasilkan Objek BufferedImage Kode QR. Kodenya adalah sebagai berikut:
/ ** * * @title: TobufferedImage * @Description: Konversi teks menjadi objek gambar kode qr * @param Text * Konten kode qr * @param width * qr code tinggi * @param tinggi * typhered tige-throws * @param * @param) melempar pengecualian {int black = 0xff000000; int white = 0xffffffff; Hashtable <encodehinttype, object> hints = hashtable baru <encodehintType, object> (); hints.put (encodehinttype.character_set, "UTF-8"); // Pengkodean set karakter yang digunakan oleh konten adalah hints.put (encodehinttype.margin, 1); Bitmatrix matrix = multiformatwriter baru (). Encode (Teks, Barcodeformat.qr_code, lebar, tinggi, petunjuk); BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); untuk (int x = 0; x <lebar; x ++) {untuk (int y = 0; y <tinggi; y ++) {image.setrgb (x, y, matrix.get (x, y)? Hitam: putih); }} mengembalikan gambar; }3). Hasilkan kode QR pada posisi yang ditentukan dari gambar latar belakang kartu, kode adalah sebagai berikut:
/ ** * * @Title: MarkImageByCode * @Description: Tambahkan kode qr ke posisi yang ditentukan dari gambar * @param img * QR Code Object * @param srcimgpath * citra latar belakang * @param target peta * peta target * @param positionwidth * posisi koordinat horizontal * @param positionsheight * Posisi @posation * Posisi publicret * Posisi koordinat horizontal * @param Positionsheight * Posisi @posation * Posisi @POSICEK * POSITRECTH * POSISI Koordinat horizontal * @param PositionHeiGN * void MarkImageByCode (Image IMG, String Srcimgpath, String TargetPath, Int PositionWidth, Int PositionHeight) {outputStream os = null; coba {gambar srcimg = imageIo.read (file baru (srcimgpath)); BufferedImage buffimg = baru buferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Dapatkan Objek Sikat Graphics2d G = BuffImg.Creategraphics (); // 2. Atur pemrosesan tepi bergerigi dari segmen garis 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. Lokasi Kode QR G.DrawImage (IMG, PositionWidth, PositionHeight, Null); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 4. Lepaskan sumber daya G.Dispose (); // 5. Guitas gambar (disarankan untuk menghasilkan PNG, JPG akan terdistorsi) OS = FileOutputStream baru (TargerPath); Imageio.write (Buffimg, "Png", OS); System.out.println ("QR Code Image Generation Sukses"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {coba {if (null! = os) os.close (); } catch (Exception e) {E.PrintStackTrace (); }}} 4). Tambahkan nomor kartu ke kartu
/ ** * * @title: pressText * @Description: Tambahkan teks ke posisi yang ditentukan dari gambar * @param pressText * konten teks * @param srcimageFile * gambar asli * @param destsimageFile * @param final * void @prowret * @param koordinat vertikal * @param alpha * publikasi * horizontal * @param y * koordinat vertikal * @param alpha * publikasi * horizontal * @param y * koordinat vertikal * @param alphaes * pressText (string pressText, string srcimageFile, string destImageFile, int x, int y, float alpha) {coba {file img = file baru (srcimageFile); Image src = ImageIo.read (IMG); Int width = src.getWidth (null); int tinggi = src.getHeight (null); BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Graphics2d G = Image.Creategraphics (); // Buka teks anti-aliasing untuk menghapus Glitch Text G.SetrenderingHint (renderinghints.key_text_antialiasing, renderinghints.value_text_antialias_on); G.DrawImage (Src, 0, 0, lebar, tinggi, nol); // atur warna g.setColor (warna baru (89, 87, 87)); // atur font g.setfont (font baru ("fangzheng lanting black_gbk", font.bold, 14)); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // Parameter pertama -> mengatur konten, dua parameter berikutnya -> Koordinat posisi teks pada gambar (x, y). g.drawstring (pressText, x, y); g.dispose (); ImageIO.Write ((BufferedImage) Image, "PNG", File Baru (DestImageFile)); // Output ke File Stream} catch (Exception e) {e.printStackTrace (); }} Contoh:
Kode:
Kode uji
kelas publik codetest {public static void main (string [] args) melempar pengecualian {string text = "http://www.xxx.com/"; // Kode QR Konten // Hasilkan Kode QR // Hasilkan Kode QR Gambar Untuk Menyimpan Direktori String TargetPath = "f:/Qrcode/TargetIMG/" + utils.toStr (); // Buat direktori utils.makedirs (TargetPath); int begin = 100; // Kode Mulai nomor int end = 101; // Kode nomor akhir untuk (int i = begin; i <= end; i ++) {// menghasilkan angka 16-digit dengan tanggal, seperti 20161214000001 kode string = utils.tostr ()+utils.FormateMer (i); // Dapatkan Kode QR Objek BufferedImage Image = utils.tobufferedImage (Teks + "? PayCode =" + Code, 240.240); // menghasilkan gambar kartu berdiri dengan gambar latar belakang + kode qr utils.markimageByCode (gambar, "f: /qrcode/srcimg/src.png", targetpath + "/" + code + ".png", 340, 160); // Tambahkan nomor kode kartu berdiri ke gambar utils.pressText (kode, targetPath + "/" + kode + ".png", targetPath + "/" + kode + ".png", 390, 417, 0,5F); } // Hasilkan kode qr}} Memengaruhi:
Rendering gambar yang dihasilkan batch adalah sebagai berikut
Gambar Batch:
Kode util:
paket cn.utils.code; impor java.awt.alphacomposite; impor java.awt.color; impor java.awt.font; impor java.awt.graphics2d; impor java.awt.image; impor java.awt.renderinghints; impor java.awt.image.bufferedimage; impor java.io.file; impor java.io.fileoutputStream; impor java.io.outputStream; impor java.text.decimalformat; impor java.text.simpledateFormat; impor java.util.date; impor java.util.hashtable; impor javax.imageio.imageio; impor com.google.zxing.barcodeformat; impor com.google.zxing.encodehinttype; impor com.google.zxing.multiformatwriter; impor com.google.zxing.common.bitmatrix; /** Kelas Alat. */ kelas abstrak publik utils {/ ** format tanggal: yyyy-mm-dd hh: mm: ss*/ string statis publik df_datetime = "yyyymmdd"; private static float alpha = 1f; / ** * * @title: TobufferedImage * @Description: Konversi teks menjadi objek gambar kode qr * @param Text * Konten kode qr * @param width * qr code tinggi * @param tinggi * typhered tige-throws * @param * @param) melempar pengecualian {int black = 0xff000000; int white = 0xffffffff; Hashtable <encodehinttype, object> hints = hashtable baru <encodehintType, object> (); hints.put (encodehinttype.character_set, "UTF-8"); // Pengkodean set karakter yang digunakan oleh konten adalah hints.put (encodehinttype.margin, 1); Bitmatrix matrix = multiformatwriter baru (). Encode (Teks, Barcodeformat.qr_code, lebar, tinggi, petunjuk); BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); untuk (int x = 0; x <lebar; x ++) {untuk (int y = 0; y <tinggi; y ++) {image.setrgb (x, y, matrix.get (x, y)? Hitam: putih); }} mengembalikan gambar; } / ** * * @Title: MarkImageByCode * @Description: Tambahkan kode qr ke posisi yang ditentukan dari gambar * @param img * objek gambar kode qr * @param srcimgpath * gambar latar belakang * @param targetpath * peta target * @para PositionWidth * Posisi koordinat horizontal * @param @parhowsheight * peta target * Position PositionWidth * Posisi horizontal koordinat * @param @parhower * @Param Position * @Param PositionWidth * Posisi Horizontal Koordinat * @param Position * @parhow Position * @pision Position * @position Position static void markImageByCode (gambar img, string srcimgpath, string targetpath, int positionwidth, int positionheight) {outputStream os = null; coba {gambar srcimg = imageIo.read (file baru (srcimgpath)); BufferedImage buffimg = baru buferedImage (srcimg.getWidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Dapatkan Objek Sikat Graphics2d G = BuffImg.Creategraphics (); // 2. Atur pemrosesan tepi bergerigi dari segmen garis 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. Lokasi Kode QR G.DrawImage (IMG, PositionWidth, PositionHeight, Null); g.setComposite (alphacomposite.getInstance (alphacomposite.src_over)); // 4. Lepaskan sumber daya G.Dispose (); // 5. Hasilkan gambar (disarankan untuk menghasilkan PNG, JPG akan terdistorsi) OS = FileOutputStream baru (TargerPath); Imageio.write (Buffimg, "Png", OS); System.out.println ("QR Code Image Generation Sukses"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {coba {if (null! = os) os.close (); } catch (Exception 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 pressText (string pressText, string srcimageFile, string destImageFile, int x, int y, float alpha) {coba {file img = file baru (srcimageFile); Image src = ImageIo.read (IMG); Int width = src.getWidth (null); int tinggi = src.getHeight (null); BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Graphics2d G = Image.Creategraphics (); // Buka teks anti-aliasing untuk menghapus Glitch Text G.SetrenderingHint (renderinghints.key_text_antialiasing, renderinghints.value_text_antialias_on); G.DrawImage (Src, 0, 0, lebar, tinggi, nol); // atur warna g.setColor (warna baru (89, 87, 87)); // atur font g.setfont (font baru ("fangzheng lanting black_gbk", font.bold, 14)); g.setComposite (alphacomposite.getInstance (alphacomposite.src_atop, alpha)); // Parameter pertama -> Konten yang disetel, dua parameter berikutnya -> Posisi koordinat teks pada gambar (x, y). g.drawstring (pressText, x, y); g.dispose (); Imageio.write ((bufferedImage) Image, "png", file baru (destImageFile)); // Output ke File Stream} catch (Exception e) {E.PrintStackTrace (); }} // Tanggal ke String/** Memformat tanggal sebagai string, format default adalah yyyy-mm-dd hh: mm: ss, tanggal default adalah tanggal saat ini. */ public static string toStr () {return tostr (df_dateTime); } /** Format tanggal sebagai string, format ditentukan oleh format parameter, tanggal default adalah tanggal saat ini, nilai format dapat digunakan dalam konstanta kelas ini atau disesuaikan. */ public static string toStr (format string) {return tostr (format, new date ()); } /** Format tanggal sebagai string, format default adalah yyyy-mm-dd hh: mm: ss, tanggal ditentukan oleh tanggal parameter. */ public static string toStr (tanggal tanggal) {return tostr (df_dateTime, date); } /** Format tanggal sebagai string, format ditentukan oleh format parameter, dan tanggal ditentukan oleh tanggal parameter. Nilai format dapat digunakan dalam konstanta kelas ini atau disesuaikan. */ public static string toStr (format string, tanggal tanggal) {return new SimpleDateFormat (format) .Format (date); } public static String formatNumber (int num) {decimalformat df = new decimalformat ("000000"); String str2 = df.format (num); mengembalikan str2; } public static String formatNumber (int num) {decimalformat df = new decimalformat ("000000"); String str2 = df.format (num); mengembalikan str2; } public static boolean makedirs (string filePath) {file folder = file baru (filepath); return (folder.exists () && folder.isDirectory ())? true: folder .mkdirs (); }} Teknik yang digunakan:
1. Gunakan alat zxing untuk menghasilkan kode QR.
1) Unduh Alamat: http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/
2) .Maven Configuration
<dependency> <GroupId> com.google.zxing </groupId> <ArTifactId> core </stifactid> <version> 2.2 </version> </dependency>
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.