Java实现生成二维码及二维码解析

java 二维码技术(日志加调试) zxing 关于二维码的操作 生成与读取就是使用2个流 MatrixToImageWriter MultiFormatWriter.encode----->BitMatrix-------------------->BufferedImage //大小 int width=300; int height=300; //内容 String contents = "张三你好"; //参数 HashMap map = new HashMap(); map.put.. 阅读详情

1、导入所需的工具类jar包

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
	<artifactId>javase</artifactId>
	<version>3.3.3</version>
</dependency>

2、业务代码实现

/**
 * 	生成二维码图片
 *
 */
public class QRCodeUtils {

	/**
	 * 	为二维码图片增加LOGO头像
	 * 
	 * @see 其原理类似于图片加水印
	 * @param imagePath
	 *            	二维码图片存放路径(含文件名)
	 * @param logoPath
	 * 				LOGO头像存放路径(含文件名)
	 */
	public static void overlapImage(String imagePath, String logoPath) throws IOException {
		BufferedImage image = ImageIO.read(new File(imagePath));
		// 设置logo图片宽度为二维码图片的五分之一
		int logoWidth = image.getWidth() / 5; 
		// 设置logo图片高度为二维码图片的五分之一
		int logoHeight = image.getHeight() / 5; 
		// 设置logo图片的位置,这里令其居中
		int logoX = (image.getWidth() - logoWidth) / 2;
		// 设置logo图片的位置,这里令其居中
		int logoY = (image.getHeight() - logoHeight) / 2;
		Graphics2D graphics = image.createGraphics();
		graphics.drawImage(ImageIO.read(new File(logoPath)), logoX, logoY, logoWidth, logoHeight, null);
		graphics.dispose();
		ImageIO.write(image, imagePath.substring(imagePath.lastIndexOf(".") + 1), new File(imagePath));
	}

	/**
	 * 生成二维码
	 * 
	 * @param content
	 *            二维码内容
	 * @param charset
	 *            编码二维码内容时采用的字符集(传null时默认采用UTF-8编码)
	 * @param imagePath
	 *            二维码图片存放路径(绝对路径,含文件名)
	 * @param width
	 *            生成的二维码图片宽度
	 * @param height
	 *            生成的二维码图片高度
	 * @param logoPath
	 *            LOGO存放路径(含文件名,若不加LOGO则传null/空字符串即可)
	 * @return 生成二维码结果(true or false)
	 */
	public static boolean encodeQRCodeImage(String content, String charset, String imagePath, int width, int height,
			String logoPath) {
		Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
		// 指定编码格式
		// hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		// 指定纠错级别(L--7%,M--15%,Q--25%,H--30%)
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
		// 设置外边距
		hints.put(EncodeHintType.MARGIN, 1);
		// 编码内容,编码类型(这里指定为二维码),生成图片宽度,生成图片高度,设置参数
		BitMatrix bitMatrix = null;
		try {
			bitMatrix = new MultiFormatWriter().encode(
					new String(content.getBytes(charset == null ? "UTF-8" : charset), "ISO-8859-1"),
					BarcodeFormat.QR_CODE, width, height, hints);
		} catch (Exception e) {
			System.out.println("编码待生成二维码图片的文本时发生异常,堆栈轨迹如下");
			e.printStackTrace();
			return false;
		}
		// 生成的二维码图片默认背景为白色,前景为黑色,但是在加入logo图像后会导致logo也变为黑白色,至于是什么原因还没有仔细去读它的源码
		// 所以这里对其第一个参数黑色将ZXing默认的前景色0xFF000000稍微改了一下0xFF000001,最终效果也是白色背景黑色前景的二维码,且logo颜色保持原有不变
		// MatrixToImageConfig config = new MatrixToImageConfig(0xFF000001,
		// 0xFFFFFFFF);
		int onColor = 0xFF000001;
		MatrixToImageConfig config = new MatrixToImageConfig(onColor, 0xFFFFFFFF);
		File imgFile = new File(imagePath);
		if (!imgFile.getParentFile().exists()) {
			imgFile.getParentFile().mkdirs();
		}
		// 图片格式
		String format = imagePath.substring(imagePath.lastIndexOf(".") + 1);
		File file = new File(imagePath);
		// 这里要显式指定MatrixToImageConfig,否则还会按照默认处理将logo图像也变为黑白色(如果打算加logo的话,反之则不须传MatrixToImageConfig参数)
		try {
//			MatrixToImageWriter.writeToFile(bitMatrix, format, new File(imagePath), config); // writeToFile方法过时
			MatrixToImageWriter.writeToPath(bitMatrix, format, file.toPath(), config);
		} catch (IOException e) {
			System.out.println("生成二维码图片[" + imagePath + "]时遇到异常,堆栈轨迹如下");
			e.printStackTrace();
			return false;
		}
		// 此时二维码图片已经生成了,只不过没有logo头像,所以接下来根据传入的logoPath参数来决定是否加logo头像
		if (StringUtils.isBlank(logoPath)) {
			return true;
		} else {
			// 如果此时最终生成的二维码不是我们想要的,那么可以扩展MatrixToImageConfig类(反正ZXing提供了源码)
			// 扩展时可以重写其writeToFile方法,令其返回toBufferedImage()方法所生成的BufferedImage对象(尽管这种做法未必能解决为题,故需根据实际情景测试)
			// 然后替换这里overlapImage()里面的第一行BufferedImage image = ImageIO.read(new
			// File(imagePath));
			// 即private static void overlapImage(BufferedImage image, String imagePath, String logoPath)
			try {
				// 这里不需要判断logoPath是否指向了一个具体的文件,因为这种情景下overlapImage会抛IO异常
				overlapImage(imagePath, logoPath);
				return true;
			} catch (IOException e) {
				System.out.println("为二维码图片[" + imagePath + "]添加logo头像[" + logoPath + "]时遇到异常,堆栈轨迹如下");
				e.printStackTrace();
				return false;
			}
		}
	}

	/**
	 * 	解析二维码
	 * 
	 * @param imagePath
	 *           	 二维码图片存放路径(含文件名)
	 * @param charset
	 *            	解码二维码内容时采用的字符集(传null时默认采用UTF-8编码)
	 * @return 解析成功后返回二维码文本,否则返回空字符串
	 */
	public static String decodeQRCodeImage(String imagePath, String charset) {
		BufferedImage image = null;
		try {
			image = ImageIO.read(new File(imagePath));
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		}
		if (null == image) {
			System.out.println("Could not decode QRCodeImage");
			return "";
		}
		BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
		Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
		hints.put(DecodeHintType.CHARACTER_SET, charset == null ? "UTF-8" : charset);
		Result result = null;
		try {
			result = new MultiFormatReader().decode(bitmap, hints);
			return result.getText();
		} catch (NotFoundException e) {
			System.out.println("二维码图片[" + imagePath + "]解析失败,堆栈轨迹如下");
			e.printStackTrace();
			return "";
		}
	}
	
}

java实现二维码-使用QR Code方式生成和解析二维码 Java实现二维码的几种方式! 1、下载压缩包: 生成:http://www.swetake.com/qrcode/index-e.jtml 读取:https://osdn.jp/projects/qrcode/ 2、创建项目,将两个解压后的文件夹里的lib下的jar包都放在项目中。 3、创建类。 阅读详情

相关推荐

Java实现二维码生成与解析

二维码技术已广泛应用于我们的日常生活中,从简单的个人联系方式分享到复杂的数据传输。二维码的出现,实质上是对传统条形码技术的一次革命性升级。它以更为紧凑的结构存储了更多的信息,并且通过其独特的容错机制,即使在部分损坏的情况下也能被准确解析。其应用场景之广,包括但不限于移动支付、产品跟踪、库存管理、广告营销等,极大地提高了信息交换的效率与便利性。二维码之所以被广泛应用,很大程度上归功于它的高密度编码能力与纠错功能。二维码通过使用黑白模块来编码数据,能够表示多种信息,从数字、字母到中文字符等。

weixin_34064233的博客 1158

二维码生成工具

java 生成二维码 1.导入google的二维码生成jar 2.直接上代码

折腾java的博客 463

Java二维码生成与解析技术实现指南

二维码在当今社会的日常生活中扮演着越来越重要的角色,从商品追踪到移动支付,再到个人信息的快速分享。Java作为广泛使用的编程语言,其在二维码的生成和解析方面的能力亦不容忽视。本文将探讨如何在Java环境下进行二维码的生成和解析,为开发者提供全面的指导和参考。二维码技术利用了信息编码和解码原理,能够存储大量不同类型的数据,如文本、URL、联系信息等。通过编码算法,将这些信息转换成一系列黑白相间的方形模块,并能够在不同的设备和软件中被迅速准确地解读。

weixin_36277197的博客 984

生成二维码工具类

<!--生成二维码 start--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifact.

qq_42319005的博客 429

Java实现二维码生成与解析原理及实战

二维码,全称“Quick Response Code”,是由日本Denso Wave公司于1994年发明的一种矩阵式条码。相比传统的一维条码,二维码能在更小的空间内存储更多信息,并具备错误纠正能力,使其在部分损坏时仍可被准确识别。二维码的生成过程是一个从原始数据到最终图像输出的系统流程,主要包括以下几个步骤:Zxing 支持多种编码格式和图像格式,可通过 Maven 或 Gradle 引入项目中。Maven 依赖:Reed-Solomon(RS)码是一种非二进制循环码,其数学基础建立在。

weixin_42620563的博客 1109

实用工具类

zxing 生成二维码,可设置logo、二维码前景色/后景色、白边大小、二维码大小 详情:http://blog.youkuaiyun.com/rongku/article/details/51872156

java生成二维码

使用谷歌的依赖 java生成二维码 保存到本地文件夹中 引入依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </de...

qq_37480069的博客 445

AVM环视:系统搭建整体流程

文章目录前言一、畸变矫正鱼眼相机二、透视变换三、图像拼接四、图像融合总结 前言 由于正在做AVM环视,所以记录一下整个过程,归纳为一个系列文章,并对期间遇到的错误进行归纳整理。本文主要概括了AVM环视的大致流程和逻辑,不涉及代码部分,仅供思路参考,其中涉及的具体技术会在后期整理为小章节进行分析。 一、畸变矫正 鱼眼相机 做环视基本上使用到的是鱼眼照片,因为鱼眼相机的视角范围可以达到220°到230°,所以一个相机就可以采集到一个面的全部信息,例如汽车具有四个面,那么在汽车的前后左右分别安装一个鱼眼相机.

qq_34468890的博客 6536

Java实现生成和解析二维码

Java实现生成和解析二维码

GeGe&YoYo的博客 599

开源有限元dealii学习——step-1

#简介 dealii是一款开源的求解偏微分方程的有限元软件,它优点: 1.多种单元类型 2.可以自适应网格 3.文档和范例齐全 4.与其它库有良好的接口 5.使用c++编写 #安装 dealii可以在官网上或者github上下载源码,解压后进入源文件目录安装。 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/install...

weixin_42312251的博客 4385

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4732

Java生成、解析二维码方案以及代码实现

Java生成、解析二维码方案以及代码实现

一恍过去 1万+

服务器报错:“Unhealthy status reported by this UEFI driver without specific error message”.. 记录解决过程

服务器开机报错:Unhealthy status reported by this UEFI driver without specific...

ayychiguoguo的博客 4399

Java实现二维码的生成与解析

Java实现二维码的生成与解析

乐于分享,共同成长 684

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 947

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 431

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

<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency>

weixin_43974466的博客 203

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1004

用java实现二维码的生成与解析

一、准备工作 整体目录结构: jar包下载地址: 我放到了我的有道云里面,点我直接下载 二、实现思路 1.将字符串写到图片中—qrCodeEncode 2.从图片中解析出字符串—qrCodeDecode 3.运行测试。 三、代码实现 package com.eleven; import com.swetake.util.Qrcode; import jp.sourceforge.qrcod...

伊莱文 2977

数据库系统工程师软考备战:第三篇 - SQL语言深入解析与应用

​​创建表​​​修改表​​​删除表​。

Programming Talk 122

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

学习分享必看:javacto.taobao.com 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字、图片、网址等信息的条码图片。如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。 2.  编码范围广 该条码可以把图片、声音、文字、签字、指纹等可以...

曾昭武 1464

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java实现二维码的生成和解析_java解析二维码

try {bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, qrWidth, qrHeight, // 修改二维码底部高度hints);x < width;y++) {必看视频!获取2024年最新Java开发全套学习资料 备注Java。

2301_82242474的博客 1134

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 图像合成 - Java实现仿微信群聊头像
下一篇: 思维简史-从丛林到宇宙 一部人类思维进化史
以夢爲馬☆
博客等级 码龄15年 286粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值