Используйте ZXING PATCH для генерации QR -кода в указанной позиции подготовленного фонового изображения карты и поместите указанный текстовый содержимое (адрес ссылки, текст и т. Д.) И поместите его в эту позицию и, наконец, добавьте номер карты.
шаг:
1). Сделайте фоновое изображение, как показано ниже:
2). Создайте объект QR -кода BuffereMage. Код заключается в следующем:
/ ** * * * @title: tobufferedimage * @description: преобразовать текст в QR-код объект изображения * @param Text * QR Code Content * @param ширина * QR Код высота * @param Высота * Двухметная ширина * @param * @param exception * set file * @return bufferedimage returnimage * @throw Исключение {int black = 0xff000000; int white = 0xffffffff; Hashtable <encodehinttype, object> ntsts = new hashtable <encodehinttype, object> (); nts.put (encodehinttype.character_set, "utf-8"); // Кодирование набора символов, используемое содержимым, является nts.put (encodehinttype.margin, 1); Bitmatrix matrix = new MultiformatWriter (). Encode (Text, Barcodeformat.qr_code, ширина, высота, подсказки); BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); for (int x = 0; x <width; x ++) {for (int y = 0; y <height; y ++) {image.setrgb (x, y, matrix.get (x, y)? Black: White); }} вернуть изображение; }3). Сгенерировать QR -код в указанной позиции фонового изображения карты, код следующим образом:
/** * * @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 (image img, string srcimgpath, string targetpath, int positionwidth, int positionheight) {outputstream os = null; try {image srcimg = imageio.read (новый файл (srcimgpath)); BufferedImage buffimg = new BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Получить щетку объект Graphics2d G = buffimg.creategraphics (); // 2. Установите обработку Jagged Edge сегмента линии 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 -код местоположение G.Drawimage (IMG, PositionWidth, PositionHeight, NULL); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_over)); // 4. Выпустить ресурс g.dispose (); // 5. Сгенерировать изображение (рекомендуется генерировать PNG, JPG будет искажено) OS = New FileOutputStream (TargerPath); Imageio.write (buffimg, "png", OS); System.out.println ("QR -код генерации изображений успешно"); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (null! = os) os.close (); } catch (Exception e) {e.printstackTrace (); }}} 4). Добавить номер карты в карту
/ ** * * * @title: presstext * @description: добавить текст в указанную позицию изображения * @param presstext * text content * @param srcimagefile * исходное изображение * @param destimagefile * target image * @param x * Горизонтальная координата * @param y * vertical comportinate * @param * @return void void void void void. resptext (string presstext, string srcimagefile, string destimagefile, int x, int y, float alpha) {try {file img = new File (srcimagefile); Image src = imageio.read (img); int width = src.getwidth (null); int height = src.getheight (null); BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d g = image.creategraphics (); // Открыть текстовые анти-алиаты для удаления текстового сбоя g.setRenderingHint (renderingHints.key_text_antialiasing, renderinghints.value_text_antialias_on); g.drawimage (src, 0, 0, ширина, высота, нулевая); // установить цвет g.setcolor (новый цвет (89, 87, 87)); // Установить шрифт g.setfont (новый шрифт ("fangzheng lanting black_gbk", font.bold, 14)); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); // Первый параметр -> Установить содержимое, следующие два параметра -> Координатная позиция текста на изображении (x, y). g.drawstring (presstext, x, y); g.dispose (); Imageio.write (((BuffereMage) Image, "png", новый файл (destimagefile)); // вывод в потоку файла} catch (Exception e) {e.printStackTrace (); }} Пример:
Код:
Тестовый код
открытый класс Codetest {public static void main (string [] args) бросает исключение {string text = "http://www.xxx.com/"; // QR -код содержимое // Создание QR -кода // Создание кода QR -кода для хранения строки каталога TargetPath = "f:/qrCode/targetImg/" + utils.toStr (); // Создать каталог utils.madkedirs (TargetPath); int begin = 100; // Запуск кода num ner end = 101; // Конец кода номер для (int i = begin; i <= end; i ++) {// генерировать 16-значные числа с датами, такими как 20161214000001 String code = utils.tostr ()+utils.formateNumber (i); // Получить QR -код объект BufferedImage Image = utils.tobufferedImage (Text + "? PayCode =" + Code, 240,240); // Сгенерировать изображение постоянной карты с фоновым изображением + QR -код utils.markimagebycode (image, "f: /qrcode/srcimg/src.png", targetPath + "/" + code + ".png", 340, 160); // Добавить номер кода постоянной карты в рисунок utils.presstext (code, targetPath + "/" + code + ".png", targetPath + "/" + code + ".png", 390, 417, 0.5f); } // генерировать QR -код}} Эффект:
Рендеринги сгенерированного партии следующие
Партийная картина:
Код уточника:
пакет cn.utils.code; импортировать java.awt.alphacomposite; импортировать java.awt.color; импортировать java.awt.font; импортировать java.awt.graphics2d; импортировать java.awt.image; Импорт java.awt.renderinghints; Импорт java.awt.image.bufferedImage; Импорт java.io.file; Импорт java.io.fileOutputStream; импортировать java.io.outputstream; импортировать java.text.decimalformat; импортировать java.text.simpledateformat; импортировать java.util.date; импортировать java.util.hashtable; Импорт javax.imageio.imageio; Импорт com.google.zxing.barcodeformat; импорт com.google.zxing.encodehinttype; Импорт com.google.zxing.multiformatTwriter; Импорт com.google.zxing.common.bitmatrix; /** Класс инструментов. */ public Abstract Class utils {/ ** Формат даты: yyyy-mm-dd hh: mm: ss*/ public static String df_datetime = "yyyymmdd"; Частный статический поплавок альфа = 1f; / ** * * * @title: tobufferedimage * @description: преобразовать текст в QR-код объект изображения * @param Text * QR Code Content * @param ширина * QR Код высота * @param Высота * Двухметная ширина * @param * @param exception * set file * @return bufferedimage returnimage * @throw Исключение {int black = 0xff000000; int white = 0xffffffff; Hashtable <encodehinttype, object> ntsts = new hashtable <encodehinttype, object> (); nts.put (encodehinttype.character_set, "utf-8"); // Кодирование набора символов, используемое содержимым, является nts.put (encodehinttype.margin, 1); Bitmatrix matrix = new MultiformatWriter (). Encode (Text, Barcodeformat.qr_code, ширина, высота, подсказки); BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); for (int x = 0; x <width; x ++) {for (int y = 0; y <height; y ++) {image.setrgb (x, y, matrix.get (x, y)? Black: White); }} вернуть изображение; } / ** * * * @title: markimagebycode * @description: добавить QR -код в указанную позицию изображения * @param img * qr code объект изображения * @param srcimgpath * фоновый изображение * @param targetpath * target map * @param positionwidth * Положение горизонтальная координата * @param position * pulzehehe * pulzehehe * pulzehehe * @provis * @paramsheheight * @provis * @parhesheight * @parows * @parawsheight * @parhes * @parawsheheight * @parhows * @parames * @parawse * static void markimagebycode (image img, string srcimgpath, string targetpath, int positionwidth, int positionheight) {outputstream os = null; try {image srcimg = imageio.read (новый файл (srcimgpath)); BufferedImage buffimg = new BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Получить щетку объект Graphics2d G = buffimg.creategraphics (); // 2. Установите обработку Jagged Edge сегмента линии 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 -код местоположение G.Drawimage (IMG, PositionWidth, PositionHeight, NULL); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_over)); // 4. Выпустить ресурс g.dispose (); // 5. Сгенерировать изображение (рекомендуется генерировать PNG, JPG будет искажен) OS = New FileOutputStream (TargerPath); Imageio.write (buffimg, "png", OS); System.out.println ("QR -код генерации изображений успешно"); } catch (Exception e) {e.printstackTrace (); } наконец {try {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 окончательный статический void presstext (string presstext, string srcimagefile, string destimagefile, int x, int y, float alpha) {try {file img = new File (srcimagefile); Image src = imageio.read (img); int width = src.getwidth (null); int height = src.getheight (null); BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d g = image.creategraphics (); // Открыть текстовые анти-алиаты для удаления текстового сбоя g.setRenderingHint (renderingHints.key_text_antialiasing, renderinghints.value_text_antialias_on); g.drawimage (src, 0, 0, ширина, высота, нулевая); // установить цвет g.setcolor (новый цвет (89, 87, 87)); // Установить шрифт g.setfont (новый шрифт ("fangzheng lanting black_gbk", font.bold, 14)); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); // Первый параметр -> Содержание SET, следующие два параметра -> Положение координаты текста на изображении (x, y). g.drawstring (presstext, x, y); g.dispose (); Imageio.Write (((BuffereMage) изображение, «PNG», новый файл (destimagefile)); // вывод в File Stream} Catch (Exception e) {e.printstackTrace (); }} // Дата на строку/** Формат дата как строка, формат по умолчанию-yyyy-mm-dd hh: mm: ss, дата по умолчанию-текущая дата. */ public Static String toStr () {return toStr (df_dateTime); } /** Формат дата как строка, формат указывается в формате параметров, дата по умолчанию - текущая дата, значение формата может использоваться в постоянных или настраиваемой. */ public Static String toStr (строка формат) {return toStr (format, new Date ()); } /** Формат дата как строка, формат по умолчанию-yyyy-mm-dd hh: mm: ss, дата определяется датой параметра. */ public static String toStr (дата дата) {return toStr (df_dateTime, date); } /** Формат дата как строка, формат указывается в формате параметра, а дата определяется датой параметра. Значение формата может использоваться в постоянных или индивидуальных. */ public Static String toStr (формат строки, дата дата) {return new SimpleDateFormat (format) .format (date); } public Static String formatnumber (int num) {decimalFormat df = new DecimalFormat ("000000"); String str2 = df.format (num); вернуть str2; } public Static String formatnumber (int num) {decimalFormat df = new DecimalFormat ("000000"); String str2 = df.format (num); вернуть str2; } public Static Boolean MakedIrs (String filePath) {file folder = new File (filePath); return (folder.exists () && folder.isdirectory ())? true: folder .mkdirs (); }} Используются методы:
1. Используйте инструмент ZXING для генерации QR -кода.
1) Адрес загрузки: http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/0/
2) .maveen Configuration
<Depective> <groupid> com.google.zxing </GroupId> <artifactid> core </artifactid> <sersion> 2,2 </version> </depervice>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.