首先需要在pom.xml里添加zxing依赖

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency>
package commonUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** 二维码工具类*/
public class ZXingCodeUtil {// 二维码颜色private static final int QRCOLOR = 0xFF000000;// 背景色private static final int BGCOLOR = 0xFFFFFFFF;// 二维码宽度private static final int width = 400;// 二维码高度private static final int height = 400;/*** 生成普通的二维码* @param content 二维码内容(扫码后得到的内容)* @return*/public static BufferedImage createCode(String content) {MultiFormatWriter multiFormatWriter = null;BitMatrix bm = null;BufferedImage image = null;Map<EncodeHintType, Object> hints = getDecodeHintType();try {multiFormatWriter = new MultiFormatWriter();// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数bm = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);int w = bm.getWidth();int h = bm.getHeight();image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);// 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色for (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGCOLOR);}}} catch (WriterException e) {e.printStackTrace();}return image;}/*** @Author:pibigstar* @Description: 生成带文字的二维码* @Date:*/public static BufferedImage createCodeWithLogoAndText(String qrUrl,String text) {BufferedImage image = createCode(qrUrl);//把文字添加上去,文字不要太长,这里最多支持两行。太长就会自动截取啦try {if (text != null && !text.equals("")) {//新的图片,把带logo的二维码下面加上文字BufferedImage outImage = new BufferedImage(400, 445, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D outg = outImage.createGraphics();//画二维码到新的面板outg.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);//画文字到新的面板outg.setColor(Color.BLACK);outg.setFont(new Font("宋体", Font.BOLD, 30)); //字体、字型、字号int strWidth = outg.getFontMetrics().stringWidth(text);if (strWidth > 399) {
//                  //长度过长就截取前面部分
//                  outg.drawString(productName, 0, image.getHeight() + (outImage.getHeight() - image.getHeight())/2 + 5 ); //画文字//长度过长就换行String productName1 = text.substring(0, text.length() / 2);String productName2 = text.substring(text.length() / 2, text.length());int strWidth1 = outg.getFontMetrics().stringWidth(productName1);int strWidth2 = outg.getFontMetrics().stringWidth(productName2);outg.drawString(productName1, 200 - strWidth1 / 2, image.getHeight() + (outImage.getHeight() - image.getHeight()) / 2 + 12);BufferedImage outImage2 = new BufferedImage(400, 485, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D outg2 = outImage2.createGraphics();outg2.drawImage(outImage, 0, 0, outImage.getWidth(), outImage.getHeight(), null);outg2.setColor(Color.BLACK);outg2.setFont(new Font("宋体", Font.BOLD, 30)); //字体、字型、字号outg2.drawString(productName2, 200 - strWidth2 / 2, outImage.getHeight() + (outImage2.getHeight() - outImage.getHeight()) / 2 + 5);outg2.dispose();outImage2.flush();outImage = outImage2;} else {outg.drawString(text, 200 - strWidth / 2, image.getHeight() + (outImage.getHeight() - image.getHeight()) / 2 + 12); //画文字}outg.dispose();outImage.flush();image = outImage;image.flush();}} catch (Exception e) {e.printStackTrace();}return image;}/*** 设置二维码的格式参数* @return*/private static Map<EncodeHintType, Object> getDecodeHintType() {// 用于设置QR二维码参数Map<EncodeHintType, Object> hints = new HashMap<>();// 设置QR二维码的纠错级别(H为最高级别)具体级别信息hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置编码方式hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//设置二维码边距(空白区域)hints.put(EncodeHintType.MARGIN, 1);//设置尺寸hints.put(EncodeHintType.MAX_SIZE, 350);hints.put(EncodeHintType.MIN_SIZE, 100);return hints;}public static void main(String[] args) {//测试BufferedImage code = createCode("weixin://wxpay/bizpayurl?pr=OXpvBWTzz");try {ImageIO.write(code, "png", new File("D://123.png"));} catch (IOException e) {e.printStackTrace();}}}

用Java写一个工具类生成二维码相关推荐

  1. hutool工具类生成二维码案例

    hutool工具类生成二维码案例 一.环境: 添加hutool工具类依赖,hutool生成二维码是利用Google的zixing,而且不是强依赖,所以还需引入zxing依赖 <dependenc ...

  2. PHP基于phpqrcode类生成二维码

    使用ThinkPHP框架引入phpqrcode类生成二维码后,发现每次必须通过TP框架生成,略显繁琐,打算写一个简单的方法,然后运行php后直接批量生成二维码.方法也简单,直接写个PHP脚本,然后引入 ...

  3. phpqrcode类生成二维码详解

    本文实例讲述了PHP基于phpqrcode类生成二维码的方法.分享给大家供大家参考,具体如下: 使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www ...

  4. PHP基于phpqrcode类生成二维码的方法详解

    前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都 ...

  5. MVP登录和注册页面Activity类 生成二维码 异常捕获类

    1.分包效果 bean包:json格式转成java代码 MVP model层:loginModel package com.jia.logindemo.model; import com.google ...

  6. SpringBoot利用ZXing工具来生成二维码(简单)

    一.简单二维码生成 1.1.依赖 <!--二维码工具--> <dependency><groupId>com.google.zxing</groupId> ...

  7. Java用QRCode的方式生成二维码

    本例所需要的生成二维码和解析二维码两个相关Jar包的下载地址如下: 链接:http://pan.baidu.com/s/1dFlKmOD 密码:i4rv 来源:http://blog.csdn.net ...

  8. Java前后端分离项目生成二维码链接带中文参数遇到的问题及解决办法

    遇到的问题 最近项目做二维码分享链接过程中遇到了个小问题,使用Java后端生成二维码链接时,当拼接的参数中带有中文,使用手机浏览器扫码正常,但是用微信扫码,url中的中文被和谐掉了,导致页面显示有问题 ...

  9. thinkphp使用phpqrcode类生成二维码

    phpqrcode类文件下载 下载地址:https://sourceforge.net/projects/phpqrcode/ PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态) 具体使 ...

最新文章

  1. python得到一个10位随机数的方法及拓展
  2. Comet---“服务器推”技术实现
  3. gpxclear寄存器写0和写1_画图,搭积木,写对象 [TF 笔记 0]
  4. android browser 书签 路径,Android Browser学习七 书签历史模块: 书签UI的实现(2)
  5. array python 交集_python-数组之间的交集索引
  6. curl有php内存缓存,PHP CURL内存泄露的解决方法
  7. java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)
  8. Android APK程序加密,防止被别人反编译
  9. VS2010对C++11的语法支持简单示例
  10. 洛谷 p1434 滑雪【记忆化搜索】
  11. activiti 启动tomcat乱码_使用 IntelliJ IDEA 创建 Web 工程以及启动 Tomcat 乱码问题处理...
  12. [GIS教程] 6.1空间数据采集与处理具体步骤
  13. 《计算机技术领域当前的主流技术及其社会需求调查报告》
  14. OpenSSL Cipher 加密解密 Ruby on Rails
  15. 常见设备/CMS默认口令
  16. 【Solr】之倒排索引算法【字典树】2
  17. 佳能R5专业微单相机介绍
  18. OpenHarmony 软总线lite 源码分析
  19. TCP粘包问题以及解决方法
  20. 人体行为识别特征点提取 综述很全面

热门文章

  1. JavaScript事件机制——细思极恐
  2. 十分钟开发物联网:烟雾感应监测(Wifi版)
  3. win 64 SSDT HOOK
  4. PHP云转码安装教程
  5. 硬件基础元器件【2.电容篇】
  6. 总经理及部门经理每天、每周、每月应该做的,超级实用!
  7. html语音输入功能讯飞,图解讯飞语音输入法pc版语音悬浮窗的正确用法
  8. 从一个地图数据结构延伸出对JS数组操作的一些思考
  9. 科技查新的新颖性是指什么?
  10. Eclipse工程中java文件上有小问号的原因和解决办法