欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中使用zxing批量生成二維碼立牌

 更新時間:2016年12月15日 09:34:08   作者:Mr_Smile2014  
本篇文章主要介紹了java中使用zxing批量生成二維碼立牌,非常具有實用價值,需要的朋友可以參考下。

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

步驟:

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

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

/** 
  * 
  * @Title: toBufferedImage 
  * @Description: 把文本轉(zhuǎn)化成二維碼圖片對象 
  * @param text 
  *   二維碼內(nèi)容 
  * @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"); // 內(nèi)容所使用字符集編碼 
  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).在立牌背景圖的指定位置上生成二維碼,代碼如下:

/** 
  * 
  * @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).在立牌上加上立牌編號

/** 
  * 
  * @Title: pressText 
  * @Description:向圖片指定位置加上文字 
  * @param pressText 
  *   文字內(nèi)容 
  * @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)); 
   // 第一參數(shù)->設置的內(nèi)容,后面兩個參數(shù)->文字在圖片上的坐標位置(x,y) . 
   g.drawString(pressText, x, y); 
   g.dispose(); 
   ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));// 輸出到文件流 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 

示例:

代碼:

測試代碼

public class codeTest { 
 public static void main(String[] args) throws Exception { 
  String text = "http://www.xxx.com/"; // 二維碼內(nèi)容 
 
  // 生成二維碼 
  //生成圖片二維碼存放目錄 
  String targetPath = "f:/qrcode/targetimg/" + Utils.toStr(); 
  //創(chuàng)建目錄 
  Utils.makeDirs(targetPath); 
   
  int begin = 100;//code 開始數(shù)字 
  int end = 101;//code結(jié)束數(shù)字 
  for (int i = begin; i <= end; i++) { 
   //生成含日期的16位數(shù)字如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代碼:

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: 把文本轉(zhuǎn)化成二維碼圖片對象 
  * @param text 
  *   二維碼內(nèi)容 
  * @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"); // 內(nèi)容所使用字符集編碼 
  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 
  *   文字內(nèi)容 
  * @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)); 
   // 第一參數(shù)->設置的內(nèi)容,后面兩個參數(shù)->文字在圖片上的坐標位置(x,y) . 
   g.drawString(pressText, x, y); 
   g.dispose(); 
   ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));// 輸出到文件流 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 
 
 // 日期轉(zhuǎn)字符串 
 
 /** 將日期格式化為String,默認格式為yyyy-MM-dd HH:mm:ss,默認日期為當前日期. */ 
 public static String toStr() { 
  return toStr(DF_DATETIME); 
 } 
 
 /** 將日期格式化為String,格式由參數(shù)format指定,默認日期為當前日期,format值可使用本類常量或自定義. */ 
 public static String toStr(String format) { 
  return toStr(format, new Date()); 
 } 
 
 /** 將日期格式化為String,默認格式為yyyy-MM-dd HH:mm:ss,日期由參數(shù)date指定. */ 
 public static String toStr(Date date) { 
  return toStr(DF_DATETIME, date); 
 } 
 
 /** 將日期格式化為String,格式由參數(shù)format指定,日期由參數(shù)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(); 
 } 
 
} 

使用的技術(shù):

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

1)下載地址:http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/

2).maven配置

<dependency> 
   <groupId>com.google.zxing</groupId> 
   <artifactId>core</artifactId> 
   <version>2.2</version> 
  </dependency> 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 類型信息詳解和反射機制介紹

    Java 類型信息詳解和反射機制介紹

    這篇文章主要介紹了Java 類型信息詳解和反射機制介紹,需要的朋友可以參考下
    2020-11-11
  • 詳解Java中Collection集合的常用方法

    詳解Java中Collection集合的常用方法

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中Collection集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學習一下吧
    2021-11-11
  • springboot項目啟動的時候,運行main方法報錯NoClassDefFoundError問題

    springboot項目啟動的時候,運行main方法報錯NoClassDefFoundError問題

    這篇文章主要介紹了springboot項目啟動的時候,運行main方法報錯NoClassDefFoundError問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring5中SpringWebContext方法過時的解決方案

    Spring5中SpringWebContext方法過時的解決方案

    這篇文章主要介紹了Spring5中SpringWebContext方法過時的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java的socket請求和響應方式

    java的socket請求和響應方式

    這篇文章主要介紹了java的socket請求和響應方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • springboot設置了server.port但是沒有用,還是8080問題

    springboot設置了server.port但是沒有用,還是8080問題

    這篇文章主要介紹了springboot設置了server.port但是沒有用,還是8080問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 超詳細講解SpringCloud?Commons公共抽象的用法

    超詳細講解SpringCloud?Commons公共抽象的用法

    這篇文章主要介紹了超詳細講解SpringCloud?Commons公共抽象的用法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java精品項目瑞吉外賣之員工新增篇

    Java精品項目瑞吉外賣之員工新增篇

    這篇文章主要為大家詳細介紹了java精品項目-瑞吉外賣訂餐系統(tǒng),此項目過大,分為多章獨立講解,本篇內(nèi)容為新增員工功能的實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java并發(fā)之CAS原理詳解

    Java并發(fā)之CAS原理詳解

    這篇文章主要為大家詳細介紹了Java的CAS原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一文深入了解Java中的AtomicInteger類

    一文深入了解Java中的AtomicInteger類

    AtomicInteger是java并發(fā)包下面提供的原子類,主要操作的是int類型的整型,通過調(diào)用底層Unsafe的CAS等方法實現(xiàn)原子操作,這篇文章主要給大家介紹了關(guān)于如何通過一文深入了解Java中AtomicInteger類的相關(guān)資料,需要的朋友可以參考下
    2024-02-02

最新評論