java 二维码编码解码
做一个小项目的时候写了个二维码编码和解码的小工具,感觉可能用得到,有兴趣的朋友可以看下
再次之前,徐需要用到google的zxing相关的jar包,还有javax相关包

以上为可能用到的jar
package org.ink.image.qrimgrz; import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map; import javax.imageio.ImageIO; import com.google.gson.Gson;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer; /**
* QRImage recognize Utils imcluding code and decode
* @author ink.Flower
*
*/
public class QRImageUtils {
/**
* create QRImage,default CHARACTER_SET is UTF-8 生成二维码图片
* @param content context of image 内容
* @param filepath target FilePath of new QRImage 目标文件路径
* @param picFormat picture format,like png,jpg .etc 图片类型
* @param height height of picture 图片高度
* @param width width of picture 图片宽度
* @throws WriterException
* @throws IOException
*/
public static void QRCode(String content,String filepath,String picFormat,int height,int width) throws WriterException, IOException{
Map<EncodeHintType,Object> hints=new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
//生成矩阵
BitMatrix bitMatrix=new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,width,height,hints);
Path path = FileSystems.getDefault().getPath(filepath);
MatrixToImageWriter.writeToPath(bitMatrix, picFormat,path);
} /**
* create QRImage,default CHARACTER_SET is UTF-8 将实体类对象通过json的方式生成二维码
* @param obj The Object which is to create QRCode Image 目标实体类对象
* @param filepath target FilePath of new QRImage
* @param picFormat picture format,like png,jpg .etc
* @param height height of picture
* @param width width of picture
* @throws WriterException
* @throws IOException
*/
public static void QRCode(Object obj,String filepath,String picFormat,int height,int width) throws WriterException, IOException{
String json = new Gson().toJson(obj);
QRCode(json, filepath, picFormat, height, width);
} /**
* QRDecode to Content 二维码解码成字符串
* @param filepath 图片文件路径
* @return content 字符串内容
* @throws FileNotFoundException
* @throws IOException
* @throws NotFoundException
*/
public static String QRDecodeToString(String filepath) throws FileNotFoundException, IOException, NotFoundException{
return QRDecodeToString(new FileInputStream(filepath));
} /**
* QRDecode to Content 二维码解码
* @param is InputStream of Image File 图片输入流
* @return content 内容
* @throws FileNotFoundException
* @throws IOException
* @throws NotFoundException
*/
public static String QRDecodeToString(InputStream is) throws FileNotFoundException, IOException, NotFoundException{
BufferedImage image=ImageIO.read(is);
LuminanceSource source=new BufferedImageLuminanceSource(image);
Binarizer binarizer=new HybridBinarizer(source);
BinaryBitmap bitmap=new BinaryBitmap(binarizer);
Map<DecodeHintType,Object> map=new HashMap<DecodeHintType, Object>();
map.put(DecodeHintType.CHARACTER_SET, "UTF-8");
Result result=null;
try{
result = new MultiFormatReader().decode(bitmap,map);
}catch (Exception e) {
e.printStackTrace();
}
if(result!=null)
return result.getText();
else
return null;
} /**
* decode QRCode json格式内容二维码解码成实体类
* @param <T>
* @param filePath 图片文件路径
* @param clazz Class of target Pojo 实体类的Class对象
* @return Pojo 实体类对象
* @throws FileNotFoundException
* @throws NotFoundException
* @throws IOException
*/
public static <T> Object QRDecodeToObject(String filePath,Class<T> clazz) throws FileNotFoundException, NotFoundException, IOException{
return QRDecodeToObject(new FileInputStream(filePath), clazz);
} /**
* decode QRCode
* @param <T>
* @param is 图片输入流
* @param clazz Class of target Pojo
* @return Pojo
* @throws FileNotFoundException
* @throws NotFoundException
* @throws IOException
*/
public static <T> Object QRDecodeToObject(InputStream is,Class<T> clazz) throws FileNotFoundException, NotFoundException, IOException{
InputStreamReader reader=new InputStreamReader(is);
return new Gson().fromJson(reader, clazz);
}
}
以上
@ink
java 二维码编码解码的更多相关文章
- JAVA二维码编码&解码
QRCodeUtil.java package web; import java.awt.AlphaComposite; import java.awt.Color; import java.awt. ...
- Java二维码的解码和编码
原文:http://www.open-open.com/code/view/1430906793866 import java.io.File; import java.util.Hashtable; ...
- Java利用QRCode.jar包实现二维码编码与解码
QRcode是日本人94年开发出来的.首先去QRCode的官网http://swetake.com/qrcode/java/qr_java.html,把要用的jar包下下来,导入到项目里去.qrcod ...
- Java二维码生成与解码
基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> &l ...
- 二维码编码与解码类库ThoughtWorks.QRCode
官方地址:https://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 有源代码和示例程序 支持二维码编码(生成)和解码( ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...
- Java 二维码--转载
周末试用下Android手机的二维码扫描软件,扫描了下火车票.名片等等,觉得非常不错很有意思的.当然Java也可以实现这些,现在就分享下如何简单用Java实现二维码中QRCode的编码和解码(可以手机 ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- Halcon一维码和二维码的解码步骤和技巧——第11讲
针对Halcon中一维码和二维码的解码,我分别写了两篇文章,参见: <Halcon的一维条码解码步骤和解码技巧>:https://www.cnblogs.com/xh6300/p/1048 ...
随机推荐
- ng配置301及反向代理示例
server { listen 80; server_name fpb.com; return 301 http://www.fpb.com$request_uri; } server { liste ...
- mybatis 报错: Invalid bound statement (not found)
错误: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): test.dao.Produc ...
- Java数据库连接池-proxool
连接池技术的思想: 连接复用(高效.安全),避免数据库频繁建立.关闭的开销 --------------------极客学院(参考lulei) 1.配置文件 <proxool> <! ...
- ubuntu 16.04 LTS安装jenkins服务器
官方网站:https://jenkins.io/ 这里我们的系统是Ubuntu 16.04,所以选择Ubuntu的版本,另外,为什么选择2.60.3,而不是新的2.77?因为2.60.3是LTS版本, ...
- CodeForces 767B The Queue
模拟. 情况有点多,需要仔细.另外感觉题目的$tf$有点不太对......而且数据水了. $0$ $5$ $2$ $2$ $0$ $5$ 这组数据按照题意的话答案可以是$2$和$4$,但是好多错的答案 ...
- php通过mysqli链接mysql数据库
首先,我们先来了解一下mysqli是什么,和mysql有什么区别? 1.mysqli是一个扩展库,是允许用户访问mysql4.1或更高版本所提供的功能: 1)mysqli连接是永久连接,而MySQL是 ...
- tomcat服务器上web项目日志存放位置
1.找到log日志的配置文件:log.xml,或者log.property,找到rollingFile标签,该标签的fileName属性就是更新的日志文件的存放位置.(相对于tomcat的bin目录)
- 【动态规划/二维背包问题】mr355-三角形牧场
应该也是USACO的题目?同样没有找到具体出处. [题目大意] 和所有人一样,奶牛喜欢变化.它们正在设想新造型牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板, ...
- Generator函数(三)
Generator.prototype.return() 1.Generator函数返回的遍历器对象还有一个return方法,可以返回给定的值,并终结Generator函数的遍历. function* ...
- 判断隐式Intent是否有响应
PackageManager manager = getContext().getPackageManager(); if (manager.queryIntentActivities(intent, ...