用Java写一个工具类生成二维码
首先需要在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写一个工具类生成二维码相关推荐
- hutool工具类生成二维码案例
hutool工具类生成二维码案例 一.环境: 添加hutool工具类依赖,hutool生成二维码是利用Google的zixing,而且不是强依赖,所以还需引入zxing依赖 <dependenc ...
- PHP基于phpqrcode类生成二维码
使用ThinkPHP框架引入phpqrcode类生成二维码后,发现每次必须通过TP框架生成,略显繁琐,打算写一个简单的方法,然后运行php后直接批量生成二维码.方法也简单,直接写个PHP脚本,然后引入 ...
- phpqrcode类生成二维码详解
本文实例讲述了PHP基于phpqrcode类生成二维码的方法.分享给大家供大家参考,具体如下: 使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www ...
- PHP基于phpqrcode类生成二维码的方法详解
前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都 ...
- MVP登录和注册页面Activity类 生成二维码 异常捕获类
1.分包效果 bean包:json格式转成java代码 MVP model层:loginModel package com.jia.logindemo.model; import com.google ...
- SpringBoot利用ZXing工具来生成二维码(简单)
一.简单二维码生成 1.1.依赖 <!--二维码工具--> <dependency><groupId>com.google.zxing</groupId> ...
- Java用QRCode的方式生成二维码
本例所需要的生成二维码和解析二维码两个相关Jar包的下载地址如下: 链接:http://pan.baidu.com/s/1dFlKmOD 密码:i4rv 来源:http://blog.csdn.net ...
- Java前后端分离项目生成二维码链接带中文参数遇到的问题及解决办法
遇到的问题 最近项目做二维码分享链接过程中遇到了个小问题,使用Java后端生成二维码链接时,当拼接的参数中带有中文,使用手机浏览器扫码正常,但是用微信扫码,url中的中文被和谐掉了,导致页面显示有问题 ...
- thinkphp使用phpqrcode类生成二维码
phpqrcode类文件下载 下载地址:https://sourceforge.net/projects/phpqrcode/ PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态) 具体使 ...
最新文章
- python得到一个10位随机数的方法及拓展
- Comet---“服务器推”技术实现
- gpxclear寄存器写0和写1_画图,搭积木,写对象 [TF 笔记 0]
- android browser 书签 路径,Android Browser学习七 书签历史模块: 书签UI的实现(2)
- array python 交集_python-数组之间的交集索引
- curl有php内存缓存,PHP CURL内存泄露的解决方法
- java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)
- Android APK程序加密,防止被别人反编译
- VS2010对C++11的语法支持简单示例
- 洛谷 p1434 滑雪【记忆化搜索】
- activiti 启动tomcat乱码_使用 IntelliJ IDEA 创建 Web 工程以及启动 Tomcat 乱码问题处理...
- [GIS教程] 6.1空间数据采集与处理具体步骤
- 《计算机技术领域当前的主流技术及其社会需求调查报告》
- OpenSSL Cipher 加密解密 Ruby on Rails
- 常见设备/CMS默认口令
- 【Solr】之倒排索引算法【字典树】2
- 佳能R5专业微单相机介绍
- OpenHarmony 软总线lite 源码分析
- TCP粘包问题以及解决方法
- 人体行为识别特征点提取 综述很全面