zoukankan      html  css  js  c++  java
  • java 二维码图片生成工具类

    简单二维码生成。

    使用的是Qrcode获取boolean[][],再通过Graphics绘制生成图片。

    1、lib添加jar包:QRCode.jar

    2、代码:

    package com.gx.code;
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    
    import javax.imageio.ImageIO;
    
    import com.swetake.util.Qrcode;
    
    /**
     * 
    * @ClassName: CodeUtil 
    * @Description: TODO(二维码工具类) 
    * @author zhoujie 
    * @date 2018年7月26日 下午9:02:39 
    * @version V1.0
    * <div style="200px;height:200px;background:red;"></div>
     */
    public class CodeUtil {
    	
    	public static void main(String[] args) {
    		String content = "hello world!";
    		String newfile = "C:\Users\zj\Desktop\code.jpg";
    		createCode(content, newfile, 175, 2); //生成二维码图片
    	}
    	
    	/**
    	* @Title: createCode 
    	* @Description: 创建二维码图片
    	* @param @param content 生成内容
    	* @param @param fileDir 生成图片位置
    	* @param @param lon 二维码图片大小
    	* @param @param pixoff    偏移量
    	* @return void    返回类型 
    	* @throws
    	 */
    	public static void createCode(String content, String fileDir, Integer lon, Integer pixoff){
    		//创建图片
    		BufferedImage bufferedImage = new BufferedImage(lon, lon, 1);
    		Graphics g = bufferedImage.getGraphics();
    		g.setColor(Color.white);
    		g.fillRect(0, 0, lon, lon);
    		g.setColor(Color.black);
    		//创建一个boolean类型二维数组
    		boolean[][] bs = getBooleans(content);
    		int len = bs.length;
    		int weight = 3; //矩形点宽度
    		for (int i = 0; i < len; i++) {
    			for (int j = 0; j < len; j++) {
    				if(bs[i][j]){
    					g.fillRect(j * weight+pixoff, i * weight+pixoff, weight, weight); //绘制矩形点
    				}
    			}
    		}
    		g.dispose();
    		try {
    			ImageIO.write(bufferedImage, "jpg", new File(fileDir));
    			System.out.println("生成二维码");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
         * 纠错等级分为
         * level L : 最大 7% 的错误能够被纠正;
         * level M : 最大 15% 的错误能够被纠正;
         * level Q : 最大 25% 的错误能够被纠正;
         * level H : 最大 30% 的错误能够被纠正;
         */
    	public static boolean[][] getBooleans(String content){
    		boolean[][] bs = null;
    		Qrcode qrcode = new Qrcode();
    		qrcode.setQrcodeErrorCorrect('M'); //纠错等级
    		qrcode.setQrcodeEncodeMode('B'); //注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
    		qrcode.setQrcodeVersion(10); //版本号  1-40
    		try {
    			bs = qrcode.calQrcode(content.getBytes("utf-8"));
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return bs;
    	}
    	
    }
    

    ok,简单方便快捷。。

    代码下载

  • 相关阅读:
    openresty开发系列12--lua介绍及常用数据类型简介
    openresty开发系列11--openresty的api入门
    SSD基本工作原理
    SSD 为什么顺序写比随机写性能更好?
    df看到的文件系统容量跟parted看到的分区容量差别较大的解决方法
    DPDK无法分出连续大页面(contiguous hugepages)的几个解决方法
    How to use, monitor, and disable transparent hugepages in Red Hat Enterprise Linux 6
    Examining Huge Pages or Transparent Huge Pages performance
    Notes of O_DIRECT flag
    leveldb
  • 原文地址:https://www.cnblogs.com/qq1995/p/10359001.html
Copyright © 2011-2022 走看看