码迷,mamicode.com
首页 > 其他好文 > 详细

生成二维码

时间:2019-02-22 10:39:33      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:throw   读取   catch   颜色   asics   format   main   return   生成   

package com.youngdeer.DbConnect;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
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;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class QrcodeTest {
	
	private static final int BLACK = 0xFF000000;//用于设置图案的颜色  
	
	private static final int WHITE = 0xFFFFFFFF; //用于背景色  

	public static void main(String args[]){
		String text = "http://youngdeer.top:8080/apidoc/";
		int width = 800;
		int height = 800;
		String format = "png";
		Hashtable hints = new Hashtable();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
		hints.put(EncodeHintType.MARGIN, 2);
		try {
			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));
				}
			}
			image = new QrcodeTest().LogoMatrix(image);
			File file=new File("D:/new.png");//在D盘生成二维码图片
			ImageIO.write(image, format, file);
		} catch (Exception e) { 
			e.printStackTrace();
		}
	}
	

    /**
     * 设置 logo 
     * @param matrixImage 源二维码图片
     * @return 返回带有logo的二维码图片
     * @throws IOException
     */ 
     public BufferedImage LogoMatrix(BufferedImage matrixImage) throws IOException{  
         /**
          * 读取二维码图片,并构建绘图对象
          */ 
         Graphics2D g2 = matrixImage.createGraphics();             
         int matrixWidth = matrixImage.getWidth();  
         int matrixHeigh = matrixImage.getHeight();  
            
         /**
          * 读取Logo图片
          */ 
         BufferedImage logo = ImageIO.read(new File("D:/jcptapp.png"));  
   
         //开始绘制图片 
         g2.drawImage(logo,matrixWidth/5*2,matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5, null);//绘制      
         BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);   
         g2.setStroke(stroke);// 设置笔画对象 
         //指定弧度的圆角矩形 
         RoundRectangle2D.Float round = new RoundRectangle2D.Float(matrixWidth/5*2, matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5,20,20); 
         g2.setColor(Color.white); 
         g2.draw(round);// 绘制圆弧矩形 

         //设置logo 有一道灰色边框 
         BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);   
         g2.setStroke(stroke2);// 设置笔画对象 
         RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(matrixWidth/5*2+2, matrixHeigh/5*2+2, matrixWidth/5-4, matrixHeigh/5-4,20,20); 
         g2.setColor(new Color(128,128,128));  
         g2.draw(round2);// 绘制圆弧矩形 
         g2.dispose(); 
         matrixImage.flush() ; 

         return matrixImage ;  

     } 

}

  

生成二维码

标签:throw   读取   catch   颜色   asics   format   main   return   生成   

原文地址:https://www.cnblogs.com/hutton/p/10416709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!