Использование ZXING для реализации встроенных изображений генераторов QR -кода имеет определенное эталонное значение, следующим образом:
Основная идея состоит в том, чтобы сначала использовать изображение QR -кода, сгенерированное ZXING, затем прочитать изображение, вставить в него значок, а затем вывести все изображение.
В недавних проектах нам нужно генерировать QR -коды. Найдя несколько примеров, мы достигли окончательного эффекта. QR -код может генерировать формат изображения (JPG и т. Д.) Или отображаться на веб -странице. Эта статья записана только, и есть много сходств, поэтому я хотел бы забыть об этом. Полем Полем Полем
Примечание. Для инструментов, которые требуют упаковки ZXING, общий процесс состоит в том, чтобы считать встроенные изображения, преобразовать контент в QR -код, встроить изображения в QR -код и создать изображения.
Вот полный код:
Импорт java.awt.basicsstroke; импорт java.awt.color; import java.awt.graphics2d; import java.awt.image; Image java.awt.shape; импорт java.awt.geom.affinetransform; импорт java.awt.geom.roundrectangle2d; импорт. java.awt.image.bufferedimage; import java.io.file; импорт java.io.ioexception; импорт java.util.hashmap; импорт java.util.map; импорт javax.imageio.imageio; импорт com.google.zxing.barcodeformat; import com.google.zxing.encode com.google.zxing.MultiFormatWriter;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class Zxing {private static final int BLACK = 0xFF000000;private static final int WHITE = 0xFFFFFFFF;// General private static final int image_width = 80; Private Static Final int Image_half_width = Image_width / 2; Частный статический конечный int frame_width = 2; // QR -код написать частное статическое мультиформное явление MutiWriter = new MultiformatWriter (); public static void main (string [] args) {try {// bitmatrix bitmatrix = multiformatwriter.encode (content, barcodeformat.qr_code, 400, 400, ntsts); String Content = "13400000000"; // QR Code BufferedImage Image = GenBarcode (Content, 400, 400, "//F://п.//п. (//п.//пл. if (! Imageio.write (image, "jpg", новый файл ("f: //2122.jpg"))) {бросить новое ioexception ("не может написать изображение формата"); } /** // Поменяйте приведенный выше код здесь и используйте поток, чтобы прочитать его в странице OutputStream OS = response.getOutputStream (); if (! Imageio.write (Image, "jpg", OS)) {бросить новое ioException ("не может написать изображение формата"); } **/} catch (writerexception e) {e.printstacktrace ();} catch (ioexception e) {// todo Auto-генерированный Catch Blocke.printstacktrace ();}} private bufferedimage tobufferedimage (bitmatrix matrix) {int width = matrix.getwiDth ();) matrix.getheight ();; BufferedImage image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); for (int x = 0; x <width; x ++) {for (int y = 0; y <ehight; y ++) {image.setrgb (x, y, matrix.get (x, x, y); BufferedImage GenBarcode (содержимое строки, ширина int, int height, string srcimagepath) бросает writerexception, ioException {// Читать исходное изображение BuffereMage ScaleMage = Scale (srcimagePath, image_width, image_height, true); int [] [] srcpixels = new int [image_width] [image_height]; for (int i = 0; i <scaleMage.getWidth (); i ++) {for (int j = 0; j <scaleMage.getheight (); j ++) {srcpixels [i] [j] = scaleimage.getrgb (i, j); }} Map <encodehinttype, object> hint = new Hashmap <encodeHintType, Object> (); Hint.put (encodehinttype.character_set, "utf-8"); // Содержимое кодирования hint.put (encodehinttype.error_correction, errorcorrectionlevel.h); // Уровень ошибки hint.put (encodehinttype.margin, 1); // Установить ширину пустой области внешней границы кода QR // Сгенерировать QR -код Bitmatrix Matrix = mutiWriter.encode (Содержание, Barcodeformat.qr_code, ширина, высота, подсказка); // Преобразовать 2D-матрицу в одномерную матрицу пикселей int walfw = matrix.getWidth () / 2; int Halfh = matrix.getheight () / 2; int [] pixels = new int [ширина * высота]; for (int y = 0; y <matrix.getheight (); y ++) {for (int x = 0; x <matrix.getWidth (); x ++) {// Читать изображение if (x> Halfw - image_half_width && x <Halfw+image_half_width && y> laffh - image_half_width && y <waffilf_half_width && y> y> y> y> Image_half_width) {pixels [y * width + x] = srcpixels [x - Halfw + image_half_width] [y - Halfh + image_half_width]; } // Сформируйте границу вокруг картинки else if ((x> Halfw - image_half_width - frame_width && x <Halfw - image_half_width + frame_width && y> Halfh - image_half_width - Frame_width && y <Halfh + image_half_width + frame_width) - Frame_width && x <Halfw + Image_half_width + Frame_width && Y> Halfh - Image_half_width - Frame_width && y <Halfh + Image_half_width + Frame_width) || && y> Halfh - image_half_width - frame_width && y <Halfh - image_half_width + frame_width) || + Image_half_width + frame_width)) {pixels [y * width + x] = 0xffffffff; } else {// Здесь вы можете изменить цвет QR -кода, и вы можете сформулировать цвета QR -кода и фон соответственно; пиксели [y * width + x] = matrix.get (x, y)? 0xff000000: 0xffffffff; }}} BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); image.getraster (). SetDateAlements (0, 0, ширина, высота, пиксели); вернуть изображение; } /** * масштабируйте прошлое исходное изображение по высоте и ширине, чтобы генерировать значок, который соответствует требованиям * * @param srcimagefile * Адрес исходного файла * @param Высота * Высота целевого * @param ширина * Целевая ширина * @param hasfiller * Необходимо ли заполнить, когда масштаб неконтролирует: true in заполняется; Неверно не заполняет; * @Throws IOException */ Private Static BufferedImage Scale (String Srcimagefile, int height, int width, логический хэссфиллер) бросает ioexception {двойное соотношение = 0,0; // Scale File file = новый файл (srcimagefile); BufferedImage srcimage = imageio.read (file); Image destimage = srcimage.getscaledInstance (ширина, высота, bufferedimage.scale_smooth); // Рассчитайте шкалу if ((srcimage.getheight ()> height) || (srcimage.getwidth ()> width)) {if (srcimage.getheight ()> srcimage.getwidth ()) {aterio = (новый integer (ehest).). } else {catio = (new Integer (ширина)). DoubleValue () / srcimage.getWidth (); } AffineTransformop op = new AffineTransformop (AffineTransform.getScaleInstance (соотношение, соотношение), null); destimage = op.filter (srcimage, null); } if (hasfiller) {// Заполнение BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d graphic = image.creategraphics (); graphic.setcolor (color.pink); graphic.fillrect (10, 10, ширина, высота); graphic.drawrect (100, 360, ширина, высота); if (width == destimage.getwidth (null)) {graphic.drawimage (destimage, 0, (height - destimage.getheight (null)) / 2, destimage.getwidth (null), destimage.getheight (null), color.white, null); Форма формы = новый Roundrectangle2d.float (0, (высота - destimage.getheight (null)) / 2, ширина, ширина, 20, 20); Graphic.setStroke (New BasicStroke (5F)); graphic.draw (форма); } else {graphic.drawimage (destimage, (width - destimage.getwidth (null)) / 2, 0, destimage.getwidth (null), destimage.getheight (null), color.white, null); Форма формы = новый Roundrectangle2d.float ((ширина - destimage.getWidth (null)) / 2, 0, ширина, ширина, 20, 20); Graphic.setStroke (New BasicStroke (5F)); graphic.draw (форма); } graphic.dispose (); destimage = image; } return (buffereMage) destimage; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.