Menggunakan zxing untuk mengimplementasikan gambar tertanam dari generator kode QR memiliki nilai referensi tertentu, sebagai berikut:
Ide dasarnya adalah untuk terlebih dahulu menggunakan gambar kode QR yang dihasilkan oleh zxing, kemudian baca gambar, masukkan ikon di dalamnya, dan kemudian output seluruh gambar.
Dalam proyek terbaru, kita perlu menghasilkan kode QR. Setelah menemukan beberapa contoh, kami telah mencapai efek akhir. Kode QR dapat menghasilkan format gambar (JPG, dll.) Atau ditampilkan di halaman web. Artikel ini hanya direkam, dan ada banyak kesamaan, jadi saya ingin melupakannya. . . .
Catatan: Untuk alat yang memerlukan kemasan zxing, proses umumnya adalah membaca gambar tertanam, mengubah konten menjadi kode QR, menanamkan gambar ke kode QR, dan menghasilkan gambar.
Ini kode lengkapnya:
Impor java.awt.basicstroke; impor java.awt.color; impor java.awt.graphics2d; impor java.awt.image; gambar java.awt.shape; impor java.awt.geom.affinetransform; impor java.awt.geom.roundrringrongsform; java.awt.image.bufferedImage; impor java.io.file; impor java.io.ioException; impor java.util.hashmap; java.util.map; import javax.imageo.imageio; impor com.google.zxing.barcodeformat; com.google.zxing.multiformatwriter; import com.google.zxing.writerException; import com.google.zxing.common.bitmatrix; impor com.google.zxing.qrcode.decoder.errorcorrectionlevel; class public class zxing {public stasiun = 0 0xFFFFFFFF; // General private static final int image_width = 80; private static int int image_half_width = image_width / 2; private static final int frame_width = 2; // kode qr menulis private static multiformatwriter mutiwriter = multiformatwriter baru (); public static void main (string [] args) {try {// bitmatrix bitmatrix = multiformatwriter.encode (konten, barcodeformat.qr_code, 400, 400, petunjuk); content string = "134000000"; // qr Content ContentImage gambar = Genbarcodez); if (! imageo.write (gambar, "jpg", file baru ("f: //2122.jpg"))) {lempar ioException baru ("tidak bisa menulis gambar format"); } /** // Pertukaran kode di atas di sini dan gunakan aliran untuk membacanya ke dalam halaman outputStream os = response.getoutputStream (); if (! imageo.write (gambar, "jpg", os)) {lempar ioException baru ("tidak bisa menulis gambar format"); } **/} catch (WriteRexception e) {e.printstacktrace ();} catch (ioException e) {// TODO AUTO-ENTE-EMATISED Catch Blocke.PrintStackTrace ();} Int Width = PRIVATE BUFFEREDIMAGE.EDIMAGE (BITMATRIX MATRIX) {Int Width = Private BufferedImage. matrix.getHeight (); BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); untuk (int x = 0; x <width; x ++) {untuk (int y = 0; y <ketinggian; y ++) {image.setrgb (x, y, matrix. BufferedImage GenBarcode (konten string, lebar int, tinggi int, string srcimagePath) melempar WriterException, ioException {// Baca sumber gambar BufferedImage ScaleImage = skala (srcimagePath, image_width, image_height, true); int [] [] srcpixels = int baru [gambar_width] [gambar_height]; untuk (int i = 0; i <scaleImage.getWidth (); i ++) {for (int j = 0; j <scaleImage.getHeight (); j ++) {srcpixels [i] [j] = scaleImage.getrgb (i, j); }} Peta <encodehintType, objek> hint = hashmap baru <encodehintType, objek> (); hint.put (encodehinttype.character_set, "UTF-8"); // Konten Pengkodean Hint.put (encodeHintType.error_correction, errorCorrectionLevel.h); // kesalahan level hint.put (encodehinttype.margin, 1); // Atur lebar area kosong dari batas luar kode QR // menghasilkan kode QR bitmatrix matrix = mutiwriter.encode (konten, barcodeformat.qr_code, lebar, tinggi, petunjuk); // Konversi matriks 2D menjadi array piksel satu dimensi int halfw = matrix.getWidth () / 2; int setengah = matrix.getHeight () / 2; int [] piksel = int baru [lebar * tinggi]; untuk (int y = 0; y <matrix.getHeight (); y ++) {for (int x = 0; x <matrix.getWidth (); x ++) {// Baca gambar if (x> setengah - gambar_half_width && x <setengah+gambar_half_width && y> setengah -tiigh -thf angsh @ {piksel [y * lebar + x] = srcpixels [x - setengah + gambar_half_width] [y - setengah + gambar_half_width]; } // Bentuk perbatasan di sekitar gambar lain jika ((x> setengah - gambar_half_width - frame_width && x <setengah - gambar_half_width + frame_width && y> setengah - gambar_half_width - frame_width && y <setengah + gambar_half_half_width + frame_width) (setengah + Image_half_width + frame_width) Frame_width && x <setengah + gambar_half_width + frame_width && y> setengah - gambar_half_width - frame_width && y <setengah + gambar_half_width + frame_width) || - image_half_width - frame_width && y <setengah - image_half_width + frame_width) || (x> setengah - gambar_half_width - frame_width && x fift_h_half_width + frame_width && y> fifth_half_half_width + frame_width && y> image_half_half_hidth -fame_width && Frame_width)) {piksel [y * lebar + x] = 0xffffffff; } else {// Di sini Anda dapat memodifikasi warna kode QR, dan Anda dapat merumuskan warna kode QR dan latar belakang masing -masing; piksel [y * lebar + x] = matrix.get (x, y)? 0xff000000: 0xFFFFFFFF; }}} BufferedImage Image = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); image.getRaster (). setDataelement (0, 0, lebar, tinggi, piksel); gambar kembali; } /** * Skala gambar asli yang dilewati berdasarkan tinggi dan lebar untuk menghasilkan ikon yang memenuhi persyaratan * * @param srcimageFile * Alamat file sumber * @param tinggi * Tinggi target * @param width * lebar target * @param hasfiller * diperlukan untuk mengisi ketika skala tidak benar: true is is Fill in; Salah tidak diisi; * @Throws IoException */ Private Static BufferedImage Scale (String SrcimageFile, Int Height, Int Width, Boolean Hasfiller) melempar IoException {rasio ganda = 0,0; // file skala file = file baru (srcimageFile); BufferedImage SRCIMAGE = ImageIO.READ (file); DestImage gambar = srcimage.getScaledInstance (lebar, tinggi, bufferedImage.scale_smooth); // Calculate the scale if ((srcImage.getHeight() > height) || (srcImage.getWidth() > width)) { if (srcImage.getHeight() > srcImage.getWidth()) { ratio = (new Integer(height)).doubleValue() / srcImage.getHeight(); } else {rasio = (integer baru (lebar)). doublevalue () / srcimage.getWidth (); } Affinetransformop op = affinetransformop baru (affinetransform.getscaleInstance (rasio, rasio), null); destImage = op.filter (srcimage, null); } if (hasFiller) {// Mengisi gambar bufferedImage = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Graphics2d Graphic = Image.Creategraphics (); graphic.setColor (color.pink); graphic.fillrect (10, 10, lebar, tinggi); Graphic.drawrect (100, 360, lebar, tinggi); if (width == destImage.getWidth (null)) {graphic.drawimage (destImage, 0, (height - destimage.getheight (null)) / 2, destimage.getwidth (null), destimage.getheight (null), color.white, null); Bentuk bentuk = Roundrectangle2d.float baru (0, (tinggi - destimage.getHeight (null)) / 2, lebar, lebar, 20, 20); graphic.setstroke (BasicStroke baru (5F)); graphic.draw (bentuk); } else {graphic.drawimage (destImage, (width - destImage.getWidth (null)) / 2, 0, destImage.getWidth (null), destImage.getheight (null), color.hite, null); Bentuk bentuk = Roundrectangle2d.float ((lebar - destImage.getWidth (null)) / 2, 0, lebar, lebar, 20, 20); graphic.setstroke (BasicStroke baru (5F)); graphic.draw (bentuk); } graphic.dispose (); destImage = gambar; } return (bufferedImage) desttimage; }}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.