java 生成二维码图片
- 首先我们需要导入 Google 的 zxing 包,maven库中可以搜到
<!-- 二维码支持包 --><!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version><scope>compile</scope></dependency>
- 找一张需要放在二维码中间的图片,不选也可以,就是生成后的图片太单调了
package com.jane.util;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;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;/*** @ClassName QRCodeUtil* @Description TODO* @Author jzm* @Date : 2020/7/2 14:09**/
public class QRCodeUtil {// 二维码颜色==黑色private static final int BLACK = 0xFF000000;// 二维码颜色==白色private static final int WHITE = 0xFFFFFFFF;// 二维码图片格式==jpg和png两种private static final List<String> IMAGE_TYPE = new ArrayList<>();static {IMAGE_TYPE.add("jpg");IMAGE_TYPE.add("png");}/*** zxing方式生成二维码* 注意:* 1,文本生成二维码的方法独立出来,返回image流的形式,可以输出到页面* 2,设置容错率为最高,一般容错率越高,图片越不清晰, 但是只有将容错率设置高一点才能兼容logo图片* 3,logo图片默认占二维码图片的20%,设置太大会导致无法解析** @param content 二维码包含的内容,文本或网址* @param path 生成的二维码图片存放位置* @param size 生成的二维码图片尺寸 可以自定义或者默认(250)* @param logoPath logo的存放位置*/public static boolean zxingCodeCreate(String content, String path, Integer size, String logoPath) {try {System.out.println("开始生成二维码");//图片类型String imageType = "jpg";//获取二维码流的形式,写入到目录文件中BufferedImage image = getBufferedImage(content, size, logoPath);//获得随机数Random random = new Random();//生成二维码存放文件File file = new File(path + random.nextInt(1000) + ".jpg");if (!file.exists()) {file.mkdirs();}ImageIO.write(image, imageType, file);System.out.println("二维码生成成功");return true;} catch (IOException e) {e.printStackTrace();System.out.println("二维码生成失败");return false;}}/*** 二维码流的形式,包含文本内容** @param content 二维码文本内容* @param size 二维码尺寸* @param logoPath logo的存放位置* @return*/public static BufferedImage getBufferedImage(String content, Integer size, String logoPath) {if (size == null || size <= 0) {size = 250;}BufferedImage image = null;try {// 设置编码字符集Map<EncodeHintType, Object> hints = new HashMap<>();//设置编码hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置容错率最高hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.MARGIN, 1);// 1、生成二维码MultiFormatWriter multiFormatWriter = new MultiFormatWriter();BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, size, size, hints);// 2、获取二维码宽高int codeWidth = bitMatrix.getWidth();int codeHeight = bitMatrix.getHeight();// 3、将二维码放入缓冲流image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);for (int i = 0; i < codeWidth; i++) {for (int j = 0; j < codeHeight; j++) {// 4、循环将二维码内容定入图片image.setRGB(i, j, bitMatrix.get(i, j) ? BLACK : WHITE);}}//判断是否写入logo图片if (logoPath != null && !"".equals(logoPath)) {File logoPic = new File(logoPath);if (logoPic.exists()) {Graphics2D g = image.createGraphics();BufferedImage logo = ImageIO.read(logoPic);int widthLogo = logo.getWidth(null) > image.getWidth() * 2 / 10 ? (image.getWidth() * 2 / 10) : logo.getWidth(null);int heightLogo = logo.getHeight(null) > image.getHeight() * 2 / 10 ? (image.getHeight() * 2 / 10) : logo.getHeight(null);int x = (image.getWidth() - widthLogo) / 2;int y = (image.getHeight() - heightLogo) / 2;// 开始绘制图片g.drawImage(logo, x, y, widthLogo, heightLogo, null);g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15);//边框宽度g.setStroke(new BasicStroke(2));//边框颜色g.setColor(Color.WHITE);g.drawRect(x, y, widthLogo, heightLogo);g.dispose();logo.flush();image.flush();}}} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return image;}public static void main(String[] args) {//扫码跳转路径String smUrl = "www.baidu.com";//二维码保存路径String qrCodeUrl = "G:\\img\\QRcodeImg\\";Integer size = 500;String imgUrl = "G:\\img\\qq.jpg";QRCodeUtil.zxingCodeCreate(smUrl, qrCodeUrl, size, imgUrl);}
}
java 生成二维码图片相关推荐
- 使用Java生成二维码图片(亲测)
下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...
- 使用Java生成二维码图片
下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...
- Java - 生成二维码图片
文章目录 生成二维码图片 参考 生成二维码图片 新建 Maven Project,引入依赖: <dependency><groupId>com.google.zxing< ...
- java生成二维码图片(有logo),并在图片下方附文字
logo配置类 /*** Created by Amber Wang on 2017/11/27 17:25.*/import java.awt.*;public class LogoConfig { ...
- java生成二维码图片、转base64
本文介绍通过java把文字或url生成二维码,使用浏览器或者微信扫一扫即可获得文字或url内容,超简单的方法,两个步骤复制粘贴即可使用. 注意:内容是文字会直接显示,如果内容为url地址那么会直接访问 ...
- springboot+java生成二维码图片
接下来将从IDEA创建springboot项目到生成效果图详细地为大家展示二维码的制作过程 1.首先是创建springboot项目 上面的图有红色标记的地方需要填写的,比如项目存放的路径,包名等,其他 ...
- JAVA 生成二维码图片 可加Logo
现在二维码在很多地方有运用,在这里写一份简洁明快的代码,方便以后使用.有需要的朋友可以直接复制过去 直接使用 所需要的jar:QRCode.jar jar下载地址:点击打开链接 package QrC ...
- Java生成二维码图片,手机软件扫码后跳转网页
一.创建maven工程,添加如下依赖 <dependencies><dependency><groupId>com.google.zxing</groupId ...
- java springboot生成二维码图片
java生成二维码图片 Maven依赖 <!--生成二维码--> <dependency><groupId>com.google.zxing</groupId ...
- Java生成二维码带LOGO底部标题竖版字体
前言 Java后端生成二维码 底部 侧面带有标题,可调节字号 参考文章 使用Java生成二维码图片(亲测) Reborn_YY使用Java生成二维码图片 图标素材库 Java后台生成图片,前台实现图片 ...
最新文章
- 《数据科学:R语言实现》——第1章 R中的函数
- 从保证业务不中断,看网关的“前世今生”
- lia人是什么意思_老话说“人穷别说话,位卑莫劝人”,什么意思?有何道理?...
- ArchSummit微课堂|蘑菇街DevOps实践及心路历程分享
- Win7中如何删除访问共享时所保存的用户名和密码
- 部署桌面虚拟化时要考虑的因素
- 使用jmeter测试接口
- ~~遗传算法最最最最简单的实例~~
- steam的APEX客户端的游戏账号已遭禁用_玩个游戏也能被黑客盯上?电脑设备一不小心就沦为“肉鸡”。...
- 计算机二级2018VB题库百度云,2018年春江苏省计算机二级VB考试真题第1套
- linux数学软件,使用这些Linux应用来征服你的数学学习
- 什么是万物互联(IoE)?与物联网(IoT)的区别是什么?
- APP消息推送(Push),竟然还有这么多你不知道的
- 小程序AppId-当前开发者未绑定此AppId,请到小程序管理后台操作后重试
- 利用python爬取数据并保存到MySQL中
- 全国海选第三期:广州赛区节目视频
- HDU - 5894 hannnnah_j’s Biological Test 组合数(插板法)
- linux平台的mmdetection安装
- C# Dev利用TreeList设置菜单导航并双击节点打开模块窗体
- AI—2017大数据版图发布:AI、大数据与云计算结合是大势所趋