1. Поддержка QRCode и ZXING QR -генерация и анализ;
2. QRCode генерирует QR -коды и поддерживает добавление изображений следующим образом:
пакет общий; Импорт java.awt.color; импортировать java.awt.graphics2d; импорт java.awt.image; Image java.awt.image.bufferedImage; импорт java.io.file; импорт java.io.ioexception; импорт java.util.hashmap; import java.util.mapaxAge.Imageio Import jp.sourceforge.qrcode.qrcodedecoder; import jp.sourceforge.qrcode.exception.decodingfailedException; Импорт com.google.zxing.barcodeformat; import com.google.zxing.binarizer; import com.google.zxing.binarybitmap; import com.google.zxing.encodehinttype; импорт com.google.zxing.luminancesource; импорт com.google.zxing.multiformatred. com.google.zxing.notfoundexception; import com.google.zxing.writerexception; import com.google.zxing.common.bitmatrix; импорт com.google.zxing.common.hybridbinarizer; import com.swetake.util.qrcode; /** * Класс генерации кода QR * @author Cloud * @Data 2016-12-15 * QRCode */Public Class QrCodeutil {// QR Code Color Private Static int Black = 0xff000000; // QR Code Color Private Static int int White = 0xffffffff; /** * <span style = "font-size: 18px; font-weight: blod;"> метод zxing генерирует qr-код </span> * @param text <a href = "javascript: void ();" rel = "внешний nofollow"> QR -код содержимое </a>* @param ширина QR -код ширина* @param Высота QR -код высота* @param outputpath qr Код генерация и сохранение* @param ImageType QR Код формат*/ public static void zxingCodecReate (String Text, int, int out outputpate, string ImageTep = new HashMap <encodeHintType, String> (); // Установить кодированный символ SET HIS.PUT (ENCODEHINTTYPE.CHARACTER_SET, "UTF-8"); Попробуйте {// 1. Сгенерировать QR -код Bitmatrix Encode = new Multiformatwriter (). Encode (Text, Barcodeformat.qr_code, ширина, высота, его); // 2. Получить ширину QR -кода и высота int codewidth = encode.getWidth (); int codeheight = encode.getheight (); // 3. Поместите QR -код в буферизованную потоку BufferedImage Image = new BufferedImage (Codewidth, CodeHeight, BufferedImage.type_int_rgb); for (int i = 0; i <codewidth; i ++) {for (int j = 0; j <codeheight; j ++) {// 4. Цикл, чтобы исправить содержимое QR -кода в image image.setrgb (i, j, encode.get (i, j)? Black: White); }} Файл outputImage = new File (outputPath); // Если изображение не существует, создайте изображение if (! OutputImage.exists ()) outputImage.createnewFile (); // 5. Напишите QR -код на Image Image.Write (Image, ImageType, outputImage); } catch (writerException e) {e.printstacktrace (); System.out.println ("Генерация QR -кода не удалась"); } catch (ioException e) {e.printstackTrace (); System.out.println («Изменение QR -кода не удалось»); }}/** * <span style = "font-size: 18px; font-weight: blod;"> qr-код Analysis </span> * @param analyzepath QR Code Path * @return * @Throws IOException */@suppressWarning MultiformatReader FormatReader = new MultiformatReader (); Объект результат = null; try {file file = new File (analyzepath); if (! file.exists ()) {return "QR -код не существует"; } BufferedImage image = imageio.read (file); Luminancesource source = new Luminancesourceutil (изображение); Binarizer Binarizer = новый гибридбинаризер (источник); BinaryBitmap BinaryBitMap = новый BinaryBitMap (Binarizer); Map nts = new hashmap (); nts.put (encodehinttype.character_set, "utf-8"); result = formatreader.decode (binarybitmap, подсказки); } catch (notFoundException e) {e.printStackTrace (); } return Result; }/*** <span style = "font-size: 18px; font-weight: blod;"> qrCode генерирует QR-код </span>* @param content Qr Code Content* @param imgpath QR-генеральный путь* @param версии QR-код* @param isflag. imgpath, int version, string logopath) {try {qrcode qrcodehandler = new qrcode (); // Установить скорость погрешности ошибок QR-кода, необязательный L (7%) M (15%) Q (25%) H (30%). Чем выше скорость декодирования ошибок, тем меньше информации можно хранить, но чем меньше требование для ясности QR-кода QRCodeHandler.setQrCodeErrorRorcRect ('m'); // n представляет число, A представляет символ AZ, а B представляет другие символы qrcodehandler.setqrcodeencodemode ('b'); // Версия 1 представляет собой матрицу 21*21, и на каждое 1 увеличение версии две стороны QR -кода увеличиваются на 4; Итак, версия 7 - матрица с 45*45; Самая высокая версия - 40, которая представляет собой матрицу с 177*177 qrcodehandler.setqrcodeversion (версия); // Рассчитать размер в соответствии с версией int imgsize = 67 + 12 * (версия - 1); byte [] contentBytes = content.getBytes ("GB2312"); BufferedImage bufimg = new BufferedImage (imgsize, imgsize, bufferedimage.type_int_rgb); Graphics2d gs = bufimg.creategraphics (); Gs.setbackground (color.white); gs.clearrect (0, 0, imgsize, imgsize); // установить цвет изображения> Черный Gs.setColor (color.black); // Настройка смещения, чтобы не установить, может привести к ошибке анализа int pixoff = 2; // Вывод содержимого> QR -код if (contentBytes.length> 0 && contentBytes.length <130) {boolean [] [] codeout = qrcodehandler.calqrcode (contentBytes); for (int i = 0; i <codeout.length; i ++) {for (int j = 0; j <codeout.length; j ++) {if (codeout [j] [i]) {gs.fillrect (j * 3+pixoff, i * 3+pixoff, 3, 3); }}}} else {system.err.println ("qrcode content bytes length =" + contentbytes.length + "не в [0,130]."); } /* Определите, нужно ли вам добавить изображение логотипа* / if (logoPath! = Null) {icon файла = новый файл (LogoPath); if (icon.exists ()) {int width_4 = imgsize / 4; int width_8 = width_4 / 2; int height_4 = imgsize / 4; int height_8 = height_4 / 2; Image img = imageio.read (icon); gs.drawimage (img, width_4 + width_8, height_4 + height_8, width_4, height_4, null); gs.dispose (); bufimg.flush (); } else {System.out.println ("Ошибка: вход в систему не существует!"); }} gs.dispose (); bufimg.flush (); // Создать файл файла QR -кода imgfile = new File (imgpath); if (! imgfile.exists ()) imgfile.createnewfile (); // Получить изображение из сгенерированной строки изображения imgtype = imgpath.substring (imgpath.lastindexof (".") + 1, imgpath.length ()); // Сгенерировать QR -код QRCode Image Image.Write (bufimg, imgtype, imgfile); } catch (Exception e) {e.printstackTrace (); }}/*** <span style = "font-size: 18px; font-weight: blod;"> qrcode qr-анализ </span>* @param codepath qr path* @return parsing result*/public Static String qrcodeanalize (String CodePath) {file-file = new (codepath); BufferedImage bufimg = null; String decodeddata = null; попробуйте {if (! imagefile.exists ()) вернуть «QR -код не существует»; bufimg = imageio.read (imagefile); Qrcodedecoder decoder = new qrcodedecoder (); decodeddata = new String (decoder.decode (new ImageUtil (bufimg)), "GB2312"); } catch (ioException e) {System.out.println ("error:" + e.getMessage ()); e.printstacktrace (); } catch (decodingfailedException dfe) {system.out.println ("error:" + dfe.getmessage ()); dfe.printstacktrace (); } return decodeddata; }} 3. Последний пост -тест код: тест пакета; Импорт java.awt.image.bufferedImage; import java.io.inputstream; импорт java.net.url; Импорт javax.imageio.imageio; Импорт Common.imageutil; Импорт common.qrcodeutil; Импорт jp.sourceforge.qrcode.qrcodedecoder; /*** QR Code Generation Class* @author Cloud* @Data 2016-11-21* qrcodetest* /public class qrcodetest {public static void main (string [] args), бросает исключение { /*** Qrcodeutil.qrcodecreate ("http://blog.csdn.net/u014266877", "E: //qrcode.jpg", 15, "E: //icon.png"); *//*** QRCode QR -анализ кода Тест* string qrcodeanalyze = qrcodeutil.qrcodeanalyze ("e: //qrcode.jpg"); *//*** ZXINGCODE CODE CODE TESS* QRCODEUTIL.ZXINGCODECREATE ("http://blog.csdn.net/u014266877", 300, 300, "e: //zxingcode.jpg", "jpg"); *//*** ZXINGCODE CODE ANALOWARN* string zxinganalyze = qrcodeutil.zxingcodeanalyze ("e: //zxingcode.jpg") .toString (); */ System.out.println ("Успех"); }}