java 二维码生成(可带图片)springboot版

本文(2019年6月29日 飞快的蜗牛博客)

有时候,男人和女人是两个完全不同的世界,男人的玩笑和女人的玩笑也完全是两码事,爱的人完全不了解你,你也不要指望一个女人了解你,所以男的不是要求别人怎么样,是要求自己怎么样,男人更应该对自己好点,照顾好自己是最基本的,

不然你怎么照顾别人,男人是竞争的产物不是吗?

言归正传:

首先加入依赖我的目前依赖是:

<!-- 二维码生成 --><dependency>    <groupId>com.google.zxing</groupId>    <artifactId>core</artifactId>    <version>3.4.0</version></dependency>

第一步:

1】写工具类,宽度,高度这里写死的,我是觉得前台可控制,你自己也可以修改自己想要的

package com.xxff.util;

import com.google.zxing.*;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.HybridBinarizer;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;import java.awt.*;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.OutputStream;import java.util.Hashtable;

public class QRCodeUtil {

    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;

    private 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;        }        // 插入图片        QRCodeUtil.insertImage(image, imgPath, needCompress);        return image;    }

    private 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();    }

    public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception {        BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);        mkdirs(destPath);        // String file = new Random().nextInt(99999999)+".jpg";        // ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));        ImageIO.write(image, FORMAT_NAME, new File(destPath));    }

    public static BufferedImage encode(String content, String imgPath, boolean needCompress) throws Exception {        BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);        return image;    }

    public static void mkdirs(String destPath) {        File file = new File(destPath);        // 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)        if (!file.exists() && !file.isDirectory()) {            file.mkdirs();        }    }

    public static void encode(String content, String imgPath, String destPath) throws Exception {        QRCodeUtil.encode(content, imgPath, destPath, false);    }    // 被注释的方法    /*     * public static void encode(String content, String destPath, boolean     * needCompress) throws Exception { QRCodeUtil.encode(content, null, destPath,     * needCompress); }     */

    public static void encode(String content, String destPath) throws Exception {        QRCodeUtil.encode(content, null, destPath, false);    }

    public static void encode(String content, String imgPath, OutputStream output, boolean needCompress)            throws Exception {        BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);        ImageIO.write(image, FORMAT_NAME, output);    }

    public static void encode(String content, OutputStream output) throws Exception {        QRCodeUtil.encode(content, null, output, false);    }

    public static String decode(File file) throws Exception {        BufferedImage image;        image = ImageIO.read(file);        if (image == null) {            return null;        }        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));        Result result;        Hashtable hints = new Hashtable();        hints.put(DecodeHintType.CHARACTER_SET, CHARSET);        result = new MultiFormatReader().decode(bitmap, hints);        String resultStr = result.getText();        return resultStr;    }

    public static String decode(String path) throws Exception {        return QRCodeUtil.decode(new File(path));    }

}

第二步:测试

2】可直接微信扫描结果测试

package com.xxff.util;

public class QrCodeTest {

    public static void main(String[] args) throws Exception {        // 存放在二维码中的内容        String text = "我是小铭";        // 嵌入二维码的图片路径        String imgPath = "C:/Users/DELL01/Desktop/图片/宋世杰.jpg";        // 生成的二维码的路径及名称        String destPath = "C:/Users/DELL01/Desktop/图片/jam.jpg";        //生成二维码        QRCodeUtil.encode(text, imgPath, destPath, true);        // 解析二维码        String str = QRCodeUtil.decode(destPath);        // 打印出解析出的内容        System.out.println(str);

    }

}

第三步:controller  控制器

3】controller  控制器

package com.xxff.controller;

import com.xxff.util.QRCodeUtil;import com.xxff.util.UUID;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;import java.io.File;

/** * 二维码生成器,支持中文 * */@RestController@RequestMapping("/QRcode")public class QRcodeController {    /**     * 指定存储路径,这里是你自己配置的项目磁盘路径     */    @Value(value="${application.profile}")    private  String  profile;    /**     * 1.嵌入二维码的图片路径,要把嵌入二维码的图片提前放到D:/xxffprofile/qrcode/该路径下,     * 并起名称为qrcode.jpg     * 2.如果图片名称为空,那么就会生成一个纯净的二维码     */    String imgPath = "qrcode.jpg";    // 生成的二维码的路径    String destPath = profile+"qrcode/";

    @RequestMapping("/createQRcode")    public String createQRcode(HttpServletResponse response,String contents) throws Exception{             //嵌入图片             File testFile = new File(destPath+imgPath);             //目标文件夹             File filebag = new File(destPath);             //文件夹是否存在,不存在就创建             if (!filebag.exists()) {                filebag.mkdirs();             }             String qrImgPath = "";             //二维码嵌入图片是否存在,不存在就生成纯净的二维码图片             if(testFile.exists()){                 qrImgPath = destPath+imgPath;             }             String newName = UUID.getUUID()+".jpg";             destPath += newName;             //生成二维码             QRCodeUtil.encode(contents, qrImgPath, destPath, true);             String rpath = "qrcode/"+newName;             return  rpath;

    }}

如果觉得好,请给个赞或好评,尊重写文辛苦,不轻易转载~~~多谢!

原文地址:https://www.cnblogs.com/luojiesheng/p/11106107.html

时间: 2024-08-03 08:43:55

java 二维码生成(可带图片)springboot版的相关文章

Java二维码生成与解码

基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> </dependen

java二维码生成

二维码,是一种采用黑白相间的平面几何图形经过相应的编码算法来记载文字.图画.网址等信息的条码图画.如下图 二维码的特色: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比一般条码信息容量约高几十倍. 2.  编码规模广 该条码能够把图画.声响.文字.签字.指纹等能够数字化的信息进行编码,用条码表明出来:能够表明多种语言文字:可表明图画数据. 3.  容错能力强,具有纠错功用 这使得二维条码因穿孔.污损等导致部分损坏时,照样能够正确

java 二维码生成

直接上代码: 二维码生成核心类: package com.bbkj.wechat.tool; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.EnumMap; import javax.imageio.ImageIO; import com.google.zxing.BarcodeF

Qrcode生成二维码支持中文,带图片,带文字

1.下载Qrcode库源码, 下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library2.打开源码时, 部分类库可能会加载失败, 不用理会, 只需正常加载 QRCodeLib, QRCodeSampleApp 即可.3.生成时, 会提示编译出错, Error'ThoughtWorks.QRCode.Properties.Resources' does not contain a definition for

java二维码生成与解析代码实现

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

[转]java二维码生成与解析代码实现

转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起

java二维码生成工具

import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import java.util.Map; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import

Java 二维码生成工具类

public class QRcodeUtils { /** * 容错率等级 L */ public static final char CORRECT_L = 'L'; /** * 容错率等级 M */ public static final char CORRECT_M = 'M'; /** * 容错率等级 Q */ public static final char CORRECT_Q = 'Q'; /** * 容错率等级 H */ public static final char CORR

Java二维码生成与解码工具Zxing使用

1 package com.csii.zxing.test; 2 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 import java.io.IOException; 6 import java.util.HashMap; 7 import java.util.Hashtable; 8 import java.util.Map; 9 10 import javax.imageio.ImageIO; 11 12 im