zoukankan      html  css  js  c++  java
  • QrcodeWithLogo


    package com.qrcode;
    
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import javax.imageio.ImageIO;
    
    import com.swetake.util.Qrcode;
    
    public class QrcodeWithLogo {
    
        private static final String DATE_FORMAT = "yyyyMMddHH24mmssS";
    
        private static ThreadLocal<DateFormat> threadLocal = new
                ThreadLocal<DateFormat>() {
                    protected synchronized DateFormat initialValue() {
                        return new SimpleDateFormat(DATE_FORMAT);
                    }
                };
    
        public static String getTimeStamp() {
            return threadLocal.get().format(new Date());
        }
    
        public static int createQRCode(String content, String imgPath, String logo) {
            try {
                Qrcode qrcodeHandler = new Qrcode();
                qrcodeHandler.setQrcodeErrorCorrect('M');
                qrcodeHandler.setQrcodeEncodeMode('B');
                qrcodeHandler.setQrcodeVersion(7);
                byte[] contentBytes = content.getBytes("gb2312");
                // 构造一个BufferedImage对象 设置宽、高
                BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
                Graphics2D gs = bufImg.createGraphics();
                gs.setBackground(Color.WHITE);
                gs.clearRect(0, 0, 140, 140);
                // 设定图像颜色 > BLACK
                gs.setColor(Color.BLACK);
                // 设置偏移量 不设置可能导致解析出错
                int pixoff = 2;
                // 输出内容 > 二维码
                if (contentBytes.length > 0 && contentBytes.length < 120) {
                    boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
                    for (int i = 0; i < codeOut.length; i++) {
                        for (int j = 0; j < codeOut.length; j++) {
                            if (codeOut[j][i]) {
                                gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                            }
                        }
                    }
                } else {
                    System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");
                    return -1;
                }
                Image img = ImageIO.read(new File(logo));// 实例化一个Image对象。
                gs.drawImage(img, 44, 55, 49, 30, null);
                gs.dispose();
                bufImg.flush();
                // 生成二维码QRCode图片
                File imgFile = new File(imgPath);
                ImageIO.write(bufImg, "png", imgFile);
            } catch (Exception e) {
                e.printStackTrace();
                return -100;
            }
            return 0;
        }
    
        public static void main(String[] args) {
            String content = "www.cnblogs.com/softidea";
            String imgPath = "qr" + getTimeStamp() + ".jpg";
            String logo = "logo.png";
    
            createQRCode(content, imgPath, logo);
        }
    }

     Qrcode.jar

  • 相关阅读:
    17. 文件查找
    18. 后台进程
    16. Linux 文件目录权限
    15. SSH 远程
    14. 用户管理
    Emacs Python 自动补全--Elpy
    C++ 程序在运行时不显示dos界面
    OpenCV设置摄像头分辨率及全屏显示
    #error : Xiron Platform Abstraction Layer
    Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013
  • 原文地址:https://www.cnblogs.com/softidea/p/4606243.html
Copyright © 2011-2022 走看看