当前位置: 首页 > 编程日记 > 正文

Java实现二维码

Java实现二维码

最近突然想写一些博客,所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码。方便互相学习交流。

今天这篇博客,主要是利用Java实现二维码:

在写代码之前先讲一下整体思路,以方便更好更快捷的实现功能。

(1).首先要想实现二维码功能需要导入com.google.zxing的核心jar包,我这里导入的是core-3.2.1.jar;

(2).所谓二维码莫过于把需要的内容放入一张图片中,所以这里首先是创建一张带有参数内容的图片,方法如下:

private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception { Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//容错率:容错率越高,二维码的有效像素点就越多. hints.put(EncodeHintType.CHARACTER_SET, CHARSET);//使用小写的编码,大写会出现]Q2\000026开头内容 hints.put(EncodeHintType.MARGIN, 1);//margin 边框设置 BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);//二维码矩阵 int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//将二维码矩阵放入图片流中生成图片 for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);//填充,可设置颜色 颜色的取值为后6位 } } if (imgPath == null || "".equals(imgPath)) { return image; } // 插入图片 QRCodeUtil.insertImage(image, imgPath, needCompress); return image; }

//插入logo 如不需要logo可以不执行此方法

private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception { File file = new File(imgPath); if (!file.exists()) { System.err.println("" + imgPath + "   该文件不存在!"); return; } Image src = ImageIO.read(new File(imgPath)); int width = src.getWidth(null); int height = src.getHeight(null); if (needCompress) { // 压缩LOGO if (width > WIDTH) { width = WIDTH; } if (height > HEIGHT) { height = HEIGHT; } Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose(); src = image; } // 插入LOGO Graphics2D graph = source.createGraphics(); int x = (QRCODE_SIZE - width) / 2; int y = (QRCODE_SIZE - height) / 2; graph.drawImage(src, x, y, width, height, null); Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);// 后面两个参数是设置周边圆角,数值越大圆角越大 graph.setStroke(new BasicStroke(3f)); graph.draw(shape); graph.dispose(); }
(3).至此一张二维码图片生成方法就写完了,是不是很简单,接下来就是调用此方法。

/** * 生成二维码(内嵌LOGO) *  * @param content *            内容 * @param imgPath *            LOGO地址 * @param destPath *            存放目录 * @param needCompress *            是否压缩LOGO * @throws Exception */ public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); mkdirs(destPath); String file = new Random().nextInt(99999999) + ".jpg"; ImageIO.write(image, FORMAT_NAME, new File(destPath + "/" + file)); }

/** * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) *  * @author LongJin * @date 2013-12-11 上午10:16:36 * @param destPath *            存放目录 */ public static void mkdirs(String destPath) { File file = new File(destPath); // 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } } (4).如果不要logo只要在调用时将logo的路径传为null就好。

(5).至此一个二维码生成工具就完成了,当然有人可能需要解析二维码,所以这里就把二维码解析方法也写出,同时也方便我日后查看。

/** * 解析二维码 *  * @param file *            二维码图片 * @return * @throws Exception */ public static String decode(File file) throws Exception { BufferedImage image; image = ImageIO.read(file); if (image == null) { return null; } BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.CHARACTER_SET, CHARSET); result = new MultiFormatReader().decode(bitmap, hints); String resultStr = result.getText(); return resultStr; }

转载于:https://www.cnblogs.com/george93/p/6383564.html

相关文章:

巧用CSS的BlendTrans滤镜

作者&#xff1a;冯永曜 BlendTrans滤镜比起上一篇介绍的Revealtrans滤镜来要简单一些&#xff0c;它只有一个参数&#xff1a;Duration 变换时间&#xff0c;它的功能也比较单一&#xff0c;就是产生一种淡入淡出的效果&#xff0c;不过它的这种效果比起RevealTrans滤镜的淡入…

百度盯上媒体生意?百度CTO王海峰详解智能媒体中台

9月27日&#xff0c;由中央网信办、上海市委网信委、新华通讯社联合主办&#xff0c;新华网、上海市委网信办、上海广播电视台、百度承办的“2020中国网络媒体论坛”在上海隆重举行。在百年未有之大变局的新形势下&#xff0c;作为中国网络媒体界层次最高、最具权威性和影响力的…

[转]Android敏捷开发指南

原文地址&#xff1a;http://www.apkbus.com/android-72730-1-1.html 本文紧密结合移动开发方法与技术&#xff0c;围绕Android平台的开发探讨提供更高质量移动产品的解决方案。作者在文中分析了移动开发中常见的问题&#xff0c;从两方面阐述了ThoughtWorks&#xff08;&#…

C# 格式串(收藏)

一、用{0:?}格式化 可通过 String.Format 方法或通过 Console.Write 方法格式化数值结果&#xff0c;其中后一种方法调用 String.Format。使用格式字符串指定格式。下表包含受支持的标准格式字符串。格式字符串采用的形式为 Axx&#xff0c;其中 A 为“格式说明符”&#xff0…

巧用CSS的Wave滤镜

作者&#xff1a;冯永曜 "wave"滤镜&#xff0c;看它的名称你可能就能想到其效果&#xff0c;正如你想的那样&#xff0c;它的作用是把对象按照垂直的波形样式扭曲&#xff0c;从而产生一种特殊的效果。它共有5个参数&#xff1a;"add"&#xff1a;表示是否…

关于vmware虚拟机linux的扩容问题

Linux的VM虚拟机扩展磁盘空间 &#xff08;1&#xff09;vmware软件中编辑虚拟机设置中又扩容的选项&#xff0c;这里不做介绍。 &#xff08;2&#xff09;启动VM环境下的linux操作系统,添加新分区&#xff0c;需要root账号身份。 3.1 【fdisk -l】 extend 对应的是sda4&#…

用Python玩转PPT!

作者 | 陈熹来源 | 早起Python今天本文将基于第三方库pptx&#xff0c;详细讲解如何使用Python操作Office全家桶最后一位——PPT。安装pptx是一个非标准库&#xff0c;需要在命令行中安装pip install python-pptx要注意&#xff0c;安装的时候是python-pptx&#xff0c;而实际调…

贝塞尔曲线学习

贝塞尔曲线是UIkit中的一个关于图形绘制的类 贝塞尔曲线可以绘制矩形&#xff0c;圆形&#xff0c;直线&#xff0c;曲线&#xff0c;以及它们的混合图形。 系统常用的内置方法 // 创建基本路径 (instancetype)bezierPath; // 创建矩形路径 (instancetype)bezierPathWithRect…

巧用CSS的 Mask 滤镜

作者&#xff1a;冯永曜在网页制作中使用CSS&#xff0c;这已是众所周知&#xff0c;而关于CSS滤镜使用的却介绍得不多。其实&#xff0c;0CSS的滤镜在Dreamweaver3中用起来也很方便&#xff0c;且能使文字产生一种类似图象的效果&#xff0c;但比起图片来可就瘦小多了。不信&a…

Google Analytics功能篇 - 如何跟踪邮件打开率与点击率

有些朋友总会问我&#xff0c;在作邮件营销时&#xff0c;应该如何来跟踪这些流量呢&#xff1f;以便能知道发送的成功率&#xff0c;打开率&#xff0c;点击邮件中的链接数量&#xff0c;怎么实现这样的功能呢&#xff1f; 另外&#xff0c;有一个做邮件群发的朋友给我说&…

Google排名第一的技术,引数十万人关注!网友:差点我就放弃了!

毋庸置疑&#xff0c;Python越来越被认可为程序员新时代的风口语言。无论是刚入门的程序员&#xff0c;还是年薪百万的 BATJ 的大牛都无可否认&#xff1a;Python的应用能力是成为一名码农大神的必要项。 所以&#xff0c;很多程序员把Python当做第一语言来学习。 但对于Python…

python的zip函数

zip()函数 它是Python的内建函数&#xff0c;(与序列有关的内建函数有&#xff1a;sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列(列表)对象&#xff0c;reversed()、enumerate()返回一个迭代器(类似序列) 1 >>> type(sorted(s)) 2 <…

Nginx 搭建负载均衡

1.其实我这里并不是访问量很大&#xff0c;主要用于版本升级和维护而搭建的 2.忽略nginx安装和jetty的安装配置&#xff0c;我是在一台Linux服务器上装了两个jetty服务&#xff0c;部署两套jetty服务很简单&#xff0c;其实改改jetty.sh 脚本即可 JETTY_HOME/opt/jetty2/ JETT…

巧用CSS的Glow滤镜

作者&#xff1a;冯永曜对一个对象使用“glow”滤镜后&#xff0c;这个对象的边缘就会产生类似发光的效果&#xff0c;这种效果在PHTOSHOP中做起来都比较麻烦&#xff0c;而在DW3中用CSS的“glow”滤镜来制作却是如此地简单&#xff0c;而且节约不少字节。“glow”滤镜只有两个…

10大经典排序算法,20+张图就搞定

作者 | 李肖遥来源 | 技术让梦想更伟大冒泡排序简介冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端&#xff0c;就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样&#xff0c;故名冒泡排序。复杂度与稳定性思路原理以顺序为例从第一个元素开始一…

C# MoreLinq 扩展安装

为什么80%的码农都做不了架构师&#xff1f;>>> http://blog.csdn.net/lee576/article/details/42716905 MoreLinq是一个对Linq to object的扩展类库,它是一个开源项目(http://code.google.com/p/morelinq/source/browse 天朝已对google全力封禁,所以要翻墙)&#…

IOS学习博客不错的大部分是原创

http://blog.csdn.net/iukey/article/category/955062

巧用CSS的Light滤镜

作者&#xff1a; 冯永曜Light滤镜能产生一个模拟光源的效果&#xff0c;但使用它要通过调用它的“方法&#xff08;Method&#xff09;”来实现&#xff0c;这就要用到一些Javascrpt知识&#xff0c;虽然有一点难度&#xff0c;但产生的效果也是奇特的&#xff0c;你看看下面的…

没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?

作者 | Just 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 从互联网金融公司转变为金融科技公司&#xff0c;品牌升级后的360数科强化了“科技”的外衣。 在近期的首个360数科技术开放日&#xff0c;360数科CEO吴海生表示&#xff0c;他们已经做好金融科技的最佳…

react构建淘票票webapp,及react与vue的简单比较。

前言 前段时间使用vue2.0构建了淘票票页面&#xff0c;并写了一篇相关文章vue2.0构建淘票票webapp&#xff0c;得到了很多童鞋的支持&#xff0c;因此这些天又使用react重构了下这个项目&#xff0c;目的无他&#xff0c;只为了学习和共同进步&#xff01; 项目技术栈 前端技术…

【机器学习】机器学习算法优缺点对比(汇总篇)

作者 | 杜博亚来源 | 阿泽的学习笔记「本文的目的&#xff0c;是务实、简洁地盘点一番当前机器学习算法」。文中内容结合了个人在查阅资料过程中收集到的前人总结&#xff0c;同时添加了部分自身总结&#xff0c;在这里&#xff0c;依据实际使用中的经验&#xff0c;将对此模型…

PLSQL developer 连接不上64位Oracle 解决办法

在64位Windows2003上安装Oracle后&#xff0c;用PLSQL developer去连接数据库出现报错&#xff1a; Could not load "……\bin\oci.dll" OCIDLL forced to…… LoadLibrary&#xff08;……oci.dll&#xff09; returned 0 原因&#xff1a; oci.dll是64位的&#xf…

Docker 使用教程

概括  Docker与传统虚拟机的区别 与传统虚拟机的区别  Docker的安装 的安装  Docker daemon &#xff0c; client &#xff0c; containerd  镜像与容器操作  容器运行配置  Docker网络配置 网络配置  Alpine Docker Image  制作自己的 Docker Image …

话说CSS滤镜

作者&#xff1a;http://www.swtv.com.cn/adjunct/nr/css/css.htmAlpha 透明层次&#xff1a;滤镜效果语法&#xff1a;STYLE"filter:filtername(parameter1,parameter2,parameter3...)"其中&#xff1a;filtername为滤镜的名称&#xff1b;parameter1,parameter2等为…

面向隐私AI的TensorFlow深度定制化实践

作者 | Rosetta团队出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案。在这一篇文章中&#xff0c;我们进一步结合 Rosetta 介绍如何定制化改造 TensorFlow 中前后端相关组件&#xf…

”拿来搞笑“的大学生活

”拿来搞笑“这词&#xff0c;是我舍友对我说过好几遍&#xff0c;我才觉得这词用来形容我大学的生活再恰当不过了&#xff0c;感谢他送给我这个词。 下面就列一下我大学期间”拿来搞笑“的事情&#xff1a; —&#xff1a;无偿捐血400毫升。当时认为是一件微不足道的事情&…

巧用CSS的Border属性

。作者&#xff1a;冯永曜 来源&#xff1a;黄山村夫 制作过网页的人都有为画线而烦恼的经历&#xff0c;本文介绍的小技巧也许对你有所帮助。我们先来认识一下“Border”&#xff08;画边框&#xff09;&#xff0c;它是CSS的一个属性&#xff0c;用它可以给能确定范围的HTML标…

阿里资深算法专家:如何突围大厂算法面试?

2020 届秋招&#xff0c;算法岗灰飞烟灭。最聪明的应届生 / 程序员 &#xff0c;都在极度竞争中&#xff0c;面临着前所未有的激烈 PK 。学生因“内卷”而迷茫&#xff1b;初级程序员遇职业发展瓶颈而困惑...面对重重压力&#xff0c;苦不堪言。to do list 上写满计划&#xff…

乡下人最嘲笑城里人的16件事,无语了!

一、出门「taxi」&#xff0c;乘电梯上七楼的健身房&#xff0c;然后在跑步机上挥汗如雨。 二、半夜上网&#xff0c;去歌厅、舞厅&#xff0c;困了不睡觉。之后失眠&#xff0c;再吃安眠药。 三、管儿子叫「小兔崽子」&#xff0c;管宠物狗叫儿子。 四、挑最有特色的饭店吃…

2017浅谈面试(一)

2017给自己一个目标&#xff0c;制定一份计划&#xff0c;新的开始&#xff0c;跟随创业团队风险无处不在&#xff0c;不过还是要选好Boss。 2016一个煎熬&#xff0c;悲剧&#xff0c;没发工资的日子&#xff0c;一等就等了5个月&#xff0c;零散的就拿到了一个半月工资&#…