package com.pet.shop.utils;
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 com.pet.shop.service.upload;
import org.springframework.beans.factory.annotation.Autowired;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.List;
/**
* 二维码生成工具类
*
*/
public class QRCodeUtil {
@Autowired
private upload upload;
// 二维码颜色==黑色
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 {
//图片类型
String imageType = "jpg";
//获取二维码流的形式,写入到目录文件中
BufferedImage image = getBufferedImage(content, size, logoPath);
//获得随机数
Random random = new Random();
//生成二维码存放文件
File file = new File(path+content+".jpg");
if (!file.exists()) {
file.mkdirs();
}
ImageIO.write(image, imageType, file);
return true;
} catch (IOException e) {
e.printStackTrace();
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 = 200;
}
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;
}
/**
* 给二维码图片添加Logo
*
* @param qrPic 二维码图片
* @param logoPic logo图片
* @param path 合成后的图片存储目录
*/
public static boolean zxingCodeCreate(File qrPic, File logoPic, String path) {
try {
String imageType = path.substring(path.lastIndexOf(".") + 1).toLowerCase();
if (!IMAGE_TYPE.contains(imageType)) {
return false;
}
if (!qrPic.isFile() && !logoPic.isFile()) {
return false;
}
//读取二维码图片,并构建绘图对象
BufferedImage image = ImageIO.read(qrPic);
Graphics2D g = image.createGraphics();
//读取Logo图片
BufferedImage logo = ImageIO.read(logoPic);
//设置logo的大小,最多20%0
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();
File newFile = new File(path);
if (!newFile.exists()) {
newFile.mkdirs();
}
ImageIO.write(image, imageType, newFile);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 二维码的解析方法
*
* @param path 二维码图片目录
* @return
*/
public static Result zxingCodeAnalyze(String path) {
try {
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File(path);
if (file.exists()) {
BufferedImage image = ImageIO.read(file);
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarize
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计,基于SpringBoot+LayUI+MySql开发的线上宠物物资购买系统,内含Java完整源代码,数据库脚本 简介 本项目分多个模块开发,分别是用户模块、商城模块、购物车模块、订单模块和管理员模块,以下将对这些模块的界面进行展示 用户模块 进入登录界面 输入账号密码点击登录 跳转主页 用户的功能分别有浏览商城、添加购物车和生成并查看订单功能。 没有账号也可以注册账号 商城模块 在首页点击商城列表 可看到所有商品都被展示出来 本系统也支持搜索功能,在搜索栏输入想要搜索的商品,即可查找到想要的商品,以下图为例 点击宠物咨询,这个页面主要浏览一些养宠物的小技巧 点击关于我们,这主要是对公
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计,基于SpringBoot+LayUI+MySql开发的线上宠物物资购买系统,内含Java完整源代码,数据库脚本 (882个子文件)
$PRODUCT_WORKSPACE_FILE$ 488B
TitleServiceImpl.class 8KB
QRCodeUtil.class 7KB
OrderController.class 7KB
GoodsServiceImpl.class 6KB
OrderServiceImpl.class 5KB
GoodsController.class 5KB
TitleController.class 4KB
IndexController.class 4KB
CartServiceImpl.class 4KB
ShopApplicationTests.class 4KB
SecondTitle.class 4KB
uploadImpl.class 3KB
UserServiceImpl.class 3KB
PhotoController.class 3KB
Goods.class 3KB
Order.class 3KB
ClassVo.class 3KB
LoginAndRegister.class 3KB
CartController.class 2KB
PhotoShow.class 2KB
GoodsMapper.class 2KB
OrderStatus.class 2KB
Cart.class 2KB
PhotoShowServiceImpl.class 2KB
OrderInfo.class 2KB
ShopController.class 2KB
User.class 2KB
Interceptor.class 2KB
OrderMapper.class 1KB
SecondTitleMapper.class 1KB
FirstTitle.class 1KB
TitleService.class 1KB
FirstTitleMapper.class 1KB
UserMapper.class 980B
OrderInfoMapper.class 923B
CartMapper.class 817B
GoodsService.class 789B
ShopApplication.class 783B
PhotoMapper.class 739B
OrderService.class 584B
CartService.class 369B
PhotoShowService.class 349B
Qiniu.class 278B
UserService.class 260B
upload.class 207B
mvnw.cmd 6KB
layui.css 68KB
layui.css 68KB
layui.css 59KB
layui.css 59KB
main.css 24KB
main.css 24KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
xadmin.css 10KB
xadmin.css 10KB
laydate.css 7KB
laydate.css 7KB
laydate.css 7KB
laydate.css 7KB
code.css 1KB
code.css 1KB
code.css 1KB
code.css 1KB
font.css 505B
font.css 505B
iconfont.eot 48KB
iconfont.eot 48KB
iconfont.eot 40KB
iconfont.eot 40KB
iconfont.eot 40KB
iconfont.eot 40KB
59.gif 10KB
59.gif 10KB
59.gif 10KB
59.gif 10KB
22.gif 10KB
22.gif 10KB
22.gif 10KB
22.gif 10KB
24.gif 8KB
24.gif 8KB
24.gif 8KB
24.gif 8KB
13.gif 7KB
13.gif 7KB
13.gif 7KB
13.gif 7KB
16.gif 7KB
16.gif 7KB
16.gif 7KB
16.gif 7KB
39.gif 6KB
共 882 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
流华追梦
- 粉丝: 4383
- 资源: 2133
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的异常姿势识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功