자바 에서 zxing 을 사용 하여 QR 코드 입 패 를 대량 생 성 합 니 다.

14033 단어 자바zxingQR 코드
zxing 을 사용 하여 만들어 진 입 패 배경 그림 의 지정 한 위치 에 지정 한 텍스트 내용(링크 주소,텍스트 등)을 QR 코드 로 생 성하 여 이 위치 에 놓 고 마지막 으로 입 패 번 호 를 추가 합 니 다.
단계:
1).배경 그림 을 작성 하고 다음 그림 을 보 여 줍 니 다.

2).QR 코드 BufferedImage 대상 생 성.코드 는 다음 과 같 습 니 다:

/** 
  * 
  * @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).입 패 배경 그림 의 지정 한 위치 에 QR 코드 를 생 성 합 니 다.코드 는 다음 과 같 습 니 다.

/** 
  * 
  * @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 
  *        
  * @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(); 
  } 
 } 
예시:
코드:
테스트 코드

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 코드:

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 QR 코드 생 성 도구.
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> 
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기