zoukankan      html  css  js  c++  java
  • java生成二维码

    <!-- pom引入jar包 -->
    <!-- 二维码生成 -->
    <dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.1.0</version>
    </dependency>
     
    package com.zhx.util;
    
    
    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;
    import sun.misc.BASE64Encoder;
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.util.Hashtable;
    //二维码生成工具类
    public class ErweimaUtil {
        
        private static final String CHARSET = "utf-8";  
        private static final String FORMAT_NAME = "JPG";  
        // 二维码尺寸  
        private static final int QRCODE_SIZE = 300;  
        // LOGO宽度  
        private static final int WIDTH = 60;  
        // LOGO高度  
        private static final int HEIGHT = 60; 
        
        public static void main(String[] args) {
            try {
                BufferedImage img = createImage("该公司没有信用名片",null,true);
                
                String b64 = bfimgToBase64(img);
                System.out.println("data:image/png;base64,"+b64);
                
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
        
        //把图片存入字符流
        public static BufferedImage createImage(String content,String imgPath,boolean needCompress) throws Exception {
            Hashtable hints = new Hashtable();  
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);  
            hints.put(EncodeHintType.CHARACTER_SET, CHARSET);  
            hints.put(EncodeHintType.MARGIN, 1);  
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content,  
                    BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);  
            int width = bitMatrix.getWidth();  
            int height = bitMatrix.getHeight();  
            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, bitMatrix.get(x, y) ? 0xFF000000  
                            : 0xFFFFFFFF);  
                }  
            }
            if(imgPath == null || "".equals(imgPath)){
                return image;
            }
            ErweimaUtil.insertImage(image,imgPath,needCompress);
            
            return image;  
        } 
        //把图片字符流转成base64
        public static String bfimgToBase64(BufferedImage bufferedImage){
            String imgBase64 = null;
            try {
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                ImageIO.write(bufferedImage, "jpeg", outputStream);
                BASE64Encoder encoder = new BASE64Encoder();
                imgBase64 = encoder.encode(outputStream.toByteArray()).trim().replaceAll("\s", "").replaceAll("
    ", "").replaceAll("
    ", "");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return imgBase64;
        }
    
        public static void insertImage(BufferedImage source, String imgPath,
                                        boolean needCompress) throws Exception {
            File file = new File(imgPath);
            if (!file.exists()) {
                System.err.println(""+imgPath+"   该文件不存在!");
                return;
            }
            Image src = ImageIO.read(new File(imgPath));
            int width = src.getWidth(null);
            int height = src.getHeight(null);
            if (needCompress) { // 压缩LOGO
                if (width > WIDTH) {
                    width = WIDTH;
                }
                if (height > HEIGHT) {
                    height = HEIGHT;
                }
                Image image = src.getScaledInstance(width, height,
                        Image.SCALE_SMOOTH);
                BufferedImage tag = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(image, 0, 0, null); // 绘制缩小后的图
                g.dispose();
                src = image;
            }
            // 插入LOGO
            Graphics2D graph = source.createGraphics();
            int x = (QRCODE_SIZE - width) / 2;
            int y = (QRCODE_SIZE - height) / 2;
            graph.drawImage(src, x, y, width, height, null);
            Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
            graph.setStroke(new BasicStroke(3f));
            graph.draw(shape);
            graph.dispose();
        }
        
    }
     
    //controll调用
    @RequestMapping("/toGenerateQrCode") public ModelAndView toGenerateQrCode(String sellers_id, String goods_id, ModelAndView modelAndView) throws Exception { BufferedImage image = null; if("".equals(goods_id) || goods_id == null){ image = ErweimaUtil.createImage("123456","",true); }else { image = ErweimaUtil.createImage("789","",true); } String b64 = ErweimaUtil.bfimgToBase64(image);//转成base64 String qrcode = "data:image/png;base64," + b64;//图片url modelAndView.addObject("qrcode",qrcode); modelAndView.addObject("goods_id",goods_id); modelAndView.addObject("sellers_id",sellers_id); modelAndView.setViewName("/resellerGoods/goodsQrCode"); return modelAndView; }
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8"/>
        <title>二维码图片</title>
        <div th:replace="head"></div>
    </head>
    <body>
    <div id="qrCode">
        <image th:src="${qrcode}"></image>
    </div>//二维码地址
    <a th:href="${qrcode}" download="二维码.jpg">下载二维码</a>
    </body>
    </html>
  • 相关阅读:
    VMware12中CentOS7网络设置
    技术牛人
    PHP程序员如何突破成长瓶颈(php开发三到四年)
    php多线程
    go git 安装配置与使用 (windows 7 64bit)
    php内核和瓦力上线部署
    VM虚拟机下安装Centos7.0图文教程
    php结合redis实现高并发下的抢购、秒杀功能
    php foreach循环中unset后续的键值问题
    excle导入
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/8028490.html
Copyright © 2011-2022 走看看