日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用zxing生成二维码

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用zxing生成二维码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用zxing批量在做好的立牌背景圖的指定位置上,把指定的文本內容(鏈接地址、文本等)生成二維碼并放在該位置,

最后加上立牌編號。

步驟:

1).做好背景圖,如下圖:

掃一掃添加關注


2).生成二維碼BufferedImage對象。代碼如下:

[java] view plaincopy
  • /**?
  • ?????*??
  • ?????*?@Title:?toBufferedImage?
  • ?????*?@Description:?把文本轉化成二維碼圖片對象?
  • ?????*?@param?text?
  • ?????*????????????二維碼內容?
  • ?????*?@param?width?
  • ?????*????????????二維碼高度?
  • ?????*?@param?height?
  • ?????*????????????二位寬度?
  • ?????*?@param?
  • ?????*?@param?Exception?
  • ?????*????????????設定文件?
  • ?????*?@return?BufferedImage?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?static?BufferedImage?toBufferedImage(String?text,?int?width,??
  • ????????????int?height)?throws?Exception?{??
  • ????????int?BLACK?=?0xFF000000;??
  • ????????int?WHITE?=?0xFFFFFFFF;??
  • ????????Hashtable<EncodeHintType,?Object>?hints?=?new?Hashtable<EncodeHintType,?Object>();??
  • ????????hints.put(EncodeHintType.CHARACTER_SET,?"utf-8");?//?內容所使用字符集編碼??
  • ????????hints.put(EncodeHintType.MARGIN,?1);??
  • ????????BitMatrix?matrix?=?new?MultiFormatWriter().encode(text,??
  • ????????????????BarcodeFormat.QR_CODE,?width,?height,?hints);??
  • ????????BufferedImage?image?=?new?BufferedImage(width,?height,??
  • ????????????????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);??
  • ????????????}??
  • ????????}??
  • ????????return?image;??
  • ????}??


  • 3).在立牌背景圖的指定位置上生成二維碼,代碼如下:

    [java] view plaincopy
  • /**?
  • ?????*??
  • ?????*?@Title:?markImageByCode?
  • ?????*?@Description:?向圖片指定位置增加二維碼?
  • ?????*?@param?img?
  • ?????*????????????二維碼image對象?
  • ?????*?@param?srcImgPath?
  • ?????*????????????背景圖?
  • ?????*?@param?targerPath?
  • ?????*????????????目標圖?
  • ?????*?@param?positionWidth?
  • ?????*????????????位置橫坐標?
  • ?????*?@param?positionHeight?
  • ?????*????????????位置縱坐標?
  • ?????*?@return?void?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?static?void?markImageByCode(Image?img,?String?srcImgPath,??
  • ????????????String?targerPath,?int?positionWidth,?int?positionHeight)?{??
  • ????????OutputStream?os?=?null;??
  • ????????try?{??
  • ??
  • ????????????Image?srcImg?=?ImageIO.read(new?File(srcImgPath));??
  • ??
  • ????????????BufferedImage?buffImg?=?new?BufferedImage(srcImg.getWidth(null),??
  • ????????????????????srcImg.getHeight(null),?BufferedImage.TYPE_INT_RGB);??
  • ??
  • ????????????//?1、得到畫筆對象??
  • ????????????Graphics2D?g?=?buffImg.createGraphics();??
  • ??
  • ????????????//?2、設置對線段的鋸齒狀邊緣處理??
  • ????????????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、二維碼位置??
  • ????????????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("二維碼圖片生成成功");??
  • ??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}?finally?{??
  • ????????????try?{??
  • ????????????????if?(null?!=?os)??
  • ????????????????????os.close();??
  • ????????????}?catch?(Exception?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????}??
  • ????}??


  • 4).在立牌上加上立牌編號

    [java] view plaincopy
  • /**?
  • ?????*??
  • ?????*?@Title:?pressText?
  • ?????*?@Description:向圖片指定位置加上文字?
  • ?????*?@param?pressText?
  • ?????*????????????文字內容?
  • ?????*?@param?srcImageFile?
  • ?????*????????????原圖片?
  • ?????*?@param?destImageFile?
  • ?????*????????????目標圖片?
  • ?????*?@param?x?
  • ?????*????????????橫坐標?
  • ?????*?@param?y?
  • ?????*????????????縱坐標?
  • ?????*?@param?alpha?
  • ?????*????????????透明度?
  • ?????*?@return?void?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?final?static?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(width,?height,??
  • ????????????????????BufferedImage.TYPE_INT_RGB);??
  • ????????????Graphics2D?g?=?image.createGraphics();??
  • ????????????//?開文字抗鋸齒?去文字毛刺??
  • ????????????g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,??
  • ????????????????????RenderingHints.VALUE_TEXT_ANTIALIAS_ON);??
  • ????????????g.drawImage(src,?0,?0,?width,?height,?null);??
  • ????????????//?設置顏色??
  • ????????????g.setColor(new?Color(89,?87,?87));??
  • ????????????//?設置?Font??
  • ????????????g.setFont(new?Font("方正蘭亭中黑_GBK",?Font.BOLD,?14));??
  • ????????????g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,??
  • ????????????????????alpha));??
  • ????????????//?第一參數->設置的內容,后面兩個參數->文字在圖片上的坐標位置(x,y)?.??
  • ????????????g.drawString(pressText,?x,?y);??
  • ????????????g.dispose();??
  • ????????????ImageIO.write((BufferedImage)?image,?"PNG",?new?File(destImageFile));//?輸出到文件流??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??

  • 示例:

    代碼:

    測試代碼

    [java] view plaincopy
  • public?class?codeTest?{??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????String?text?=?"http://www.xxx.com/";?//?二維碼內容??
  • ??
  • ????????//?生成二維碼??
  • ????????//生成圖片二維碼存放目錄??
  • ????????String?targetPath?=?"f:/qrcode/targetimg/"?+?Utils.toStr();??
  • ????????//創建目錄??
  • ????????Utils.makeDirs(targetPath);??
  • ??????????
  • ????????int?begin?=?100;//code?開始數字??
  • ????????int?end?=?101;//code結束數字??
  • ????????for?(int?i?=?begin;?i?<=?end;?i++)?{??
  • ????????????//生成含日期的16位數字如20161214000001??
  • ????????????String?code?=?Utils.toStr()?+?Utils.formateNumber(i);??
  • ????????????//獲取二維碼對象??
  • ????????????BufferedImage?image?=?Utils.toBufferedImage(text??
  • ????????????????????+?"?payCode="?+?code,240,240);??
  • ????????????//生成含背景圖+二維碼的立牌的圖??
  • ????????????Utils.markImageByCode(image,?"f:/qrcode/srcimg/src.png",??
  • ????????????????????targetPath?+?"/"?+?code?+?".png",?340,?160);??
  • ????????????//立牌的圖加上code編號??
  • ????????????Utils.pressText(code,?targetPath?+?"/"?+?code?+?".png",?targetPath??
  • ????????????????????+?"/"?+?code?+?".png",?390,?417,?0.5f);??
  • ????????}??
  • ????????//?生成二維碼??
  • ????}??
  • }??

  • 效果:

    批量生成的圖片效果圖如下

    批量圖:

    utils代碼:

    [java] view plaincopy
  • package?cn.utils.code;??
  • ??
  • import?java.awt.AlphaComposite;??
  • import?java.awt.Color;??
  • import?java.awt.Font;??
  • import?java.awt.Graphics2D;??
  • import?java.awt.Image;??
  • import?java.awt.RenderingHints;??
  • import?java.awt.image.BufferedImage;??
  • import?java.io.File;??
  • import?java.io.FileOutputStream;??
  • import?java.io.OutputStream;??
  • import?java.text.DecimalFormat;??
  • import?java.text.SimpleDateFormat;??
  • import?java.util.Date;??
  • import?java.util.Hashtable;??
  • ??
  • import?javax.imageio.ImageIO;??
  • ??
  • import?com.google.zxing.BarcodeFormat;??
  • import?com.google.zxing.EncodeHintType;??
  • import?com.google.zxing.MultiFormatWriter;??
  • import?com.google.zxing.common.BitMatrix;??
  • ??
  • /**?工具類.?*/??
  • public?abstract?class?Utils?{??
  • ??
  • ????/**?日期格式:yyyy-MM-dd?HH:mm:ss?*/??
  • ????public?static?String?DF_DATETIME?=?"yyyyMMdd";??
  • ????private?static?float?alpha?=?1f;??
  • ??
  • ????/**?
  • ?????*??
  • ?????*?@Title:?toBufferedImage?
  • ?????*?@Description:?把文本轉化成二維碼圖片對象?
  • ?????*?@param?text?
  • ?????*????????????二維碼內容?
  • ?????*?@param?width?
  • ?????*????????????二維碼高度?
  • ?????*?@param?height?
  • ?????*????????????二位寬度?
  • ?????*?@param?
  • ?????*?@param?Exception?
  • ?????*????????????設定文件?
  • ?????*?@return?BufferedImage?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?static?BufferedImage?toBufferedImage(String?text,?int?width,??
  • ????????????int?height)?throws?Exception?{??
  • ????????int?BLACK?=?0xFF000000;??
  • ????????int?WHITE?=?0xFFFFFFFF;??
  • ????????Hashtable<EncodeHintType,?Object>?hints?=?new?Hashtable<EncodeHintType,?Object>();??
  • ????????hints.put(EncodeHintType.CHARACTER_SET,?"utf-8");?//?內容所使用字符集編碼??
  • ????????hints.put(EncodeHintType.MARGIN,?1);??
  • ????????BitMatrix?matrix?=?new?MultiFormatWriter().encode(text,??
  • ????????????????BarcodeFormat.QR_CODE,?width,?height,?hints);??
  • ????????BufferedImage?image?=?new?BufferedImage(width,?height,??
  • ????????????????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);??
  • ????????????}??
  • ????????}??
  • ????????return?image;??
  • ????}??
  • ??
  • ????/**?
  • ?????*??
  • ?????*?@Title:?markImageByCode?
  • ?????*?@Description:?向圖片指定位置增加二維碼?
  • ?????*?@param?img?
  • ?????*????????????二維碼image對象?
  • ?????*?@param?srcImgPath?
  • ?????*????????????背景圖?
  • ?????*?@param?targerPath?
  • ?????*????????????目標圖?
  • ?????*?@param?positionWidth?
  • ?????*????????????位置橫坐標?
  • ?????*?@param?positionHeight?
  • ?????*????????????位置縱坐標?
  • ?????*?@return?void?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?static?void?markImageByCode(Image?img,?String?srcImgPath,??
  • ????????????String?targerPath,?int?positionWidth,?int?positionHeight)?{??
  • ????????OutputStream?os?=?null;??
  • ????????try?{??
  • ??
  • ????????????Image?srcImg?=?ImageIO.read(new?File(srcImgPath));??
  • ??
  • ????????????BufferedImage?buffImg?=?new?BufferedImage(srcImg.getWidth(null),??
  • ????????????????????srcImg.getHeight(null),?BufferedImage.TYPE_INT_RGB);??
  • ??
  • ????????????//?1、得到畫筆對象??
  • ????????????Graphics2D?g?=?buffImg.createGraphics();??
  • ??
  • ????????????//?2、設置對線段的鋸齒狀邊緣處理??
  • ????????????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、二維碼位置??
  • ????????????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("二維碼圖片生成成功");??
  • ??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}?finally?{??
  • ????????????try?{??
  • ????????????????if?(null?!=?os)??
  • ????????????????????os.close();??
  • ????????????}?catch?(Exception?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????/**?
  • ?????*??
  • ?????*?@Title:?pressText?
  • ?????*?@Description:向圖片指定位置加上文字?
  • ?????*?@param?pressText?
  • ?????*????????????文字內容?
  • ?????*?@param?srcImageFile?
  • ?????*????????????原圖片?
  • ?????*?@param?destImageFile?
  • ?????*????????????目標圖片?
  • ?????*?@param?x?
  • ?????*????????????橫坐標?
  • ?????*?@param?y?
  • ?????*????????????縱坐標?
  • ?????*?@param?alpha?
  • ?????*????????????透明度?
  • ?????*?@return?void?返回類型?
  • ?????*?@throws?
  • ?????*/??
  • ????public?final?static?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(width,?height,??
  • ????????????????????BufferedImage.TYPE_INT_RGB);??
  • ????????????Graphics2D?g?=?image.createGraphics();??
  • ????????????//?開文字抗鋸齒?去文字毛刺??
  • ????????????g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,??
  • ????????????????????RenderingHints.VALUE_TEXT_ANTIALIAS_ON);??
  • ????????????g.drawImage(src,?0,?0,?width,?height,?null);??
  • ????????????//?設置顏色??
  • ????????????g.setColor(new?Color(89,?87,?87));??
  • ????????????//?設置?Font??
  • ????????????g.setFont(new?Font("方正蘭亭中黑_GBK",?Font.BOLD,?14));??
  • ????????????g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,??
  • ????????????????????alpha));??
  • ????????????//?第一參數->設置的內容,后面兩個參數->文字在圖片上的坐標位置(x,y)?.??
  • ????????????g.drawString(pressText,?x,?y);??
  • ????????????g.dispose();??
  • ????????????ImageIO.write((BufferedImage)?image,?"PNG",?new?File(destImageFile));//?輸出到文件流??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ??
  • ????//?日期轉字符串??
  • ??
  • ????/**?將日期格式化為String,默認格式為yyyy-MM-dd?HH:mm:ss,默認日期為當前日期.?*/??
  • ????public?static?String?toStr()?{??
  • ????????return?toStr(DF_DATETIME);??
  • ????}??
  • ??
  • ????/**?將日期格式化為String,格式由參數format指定,默認日期為當前日期,format值可使用本類常量或自定義.?*/??
  • ????public?static?String?toStr(String?format)?{??
  • ????????return?toStr(format,?new?Date());??
  • ????}??
  • ??
  • ????/**?將日期格式化為String,默認格式為yyyy-MM-dd?HH:mm:ss,日期由參數date指定.?*/??
  • ????public?static?String?toStr(Date?date)?{??
  • ????????return?toStr(DF_DATETIME,?date);??
  • ????}??
  • ??
  • ????/**?將日期格式化為String,格式由參數format指定,日期由參數date指定,format值可使用本類常量或自定義.?*/??
  • ????public?static?String?toStr(String?format,?Date?date)?{??
  • ????????return?new?SimpleDateFormat(format).format(date);??
  • ????}??
  • ??
  • ????public?static?String?formateNumber(int?num)?{??
  • ????????DecimalFormat?df?=?new?DecimalFormat("000000");??
  • ????????String?str2?=?df.format(num);??
  • ????????return?str2;??
  • ????}??
  • ??
  • ????public?static?boolean?makeDirs(String?filePath)?{??
  • ??
  • ????????File?folder?=?new?File(filePath);??
  • ????????return?(folder.exists()?&&?folder.isDirectory())???true?:?folder??
  • ????????????????.mkdirs();??
  • ????}??
  • ??
  • }??

  • 使用的技術:

    1.使用的zxing生成二維碼工具。

    1)下載地址:

    http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/

    2).maven配置

    [java] view plaincopy
  • <dependency>??
  • ????????????<groupId>com.google.zxing</groupId>??
  • ????????????<artifactId>core</artifactId>??
  • ????????????<version>2.2</version>??
  • ????????</dependency>?
  • 總結

    以上是生活随笔為你收集整理的使用zxing生成二维码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。