做一个小项目的时候写了个二维码编码和解码的小工具,感觉可能用得到,有兴趣的朋友可以看下

再次之前,徐需要用到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 二维码编码解码的更多相关文章

  1. JAVA二维码编码&解码

    QRCodeUtil.java package web; import java.awt.AlphaComposite; import java.awt.Color; import java.awt. ...

  2. Java二维码的解码和编码

    原文:http://www.open-open.com/code/view/1430906793866 import java.io.File; import java.util.Hashtable; ...

  3. Java利用QRCode.jar包实现二维码编码与解码

    QRcode是日本人94年开发出来的.首先去QRCode的官网http://swetake.com/qrcode/java/qr_java.html,把要用的jar包下下来,导入到项目里去.qrcod ...

  4. Java二维码生成与解码

      基于google zxing 的Java二维码生成与解码   一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> &l ...

  5. 二维码编码与解码类库ThoughtWorks.QRCode

    官方地址:https://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 有源代码和示例程序 支持二维码编码(生成)和解码( ...

  6. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...

  7. Java 二维码--转载

    周末试用下Android手机的二维码扫描软件,扫描了下火车票.名片等等,觉得非常不错很有意思的.当然Java也可以实现这些,现在就分享下如何简单用Java实现二维码中QRCode的编码和解码(可以手机 ...

  8. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍   我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...

  9. Halcon一维码和二维码的解码步骤和技巧——第11讲

    针对Halcon中一维码和二维码的解码,我分别写了两篇文章,参见: <Halcon的一维条码解码步骤和解码技巧>:https://www.cnblogs.com/xh6300/p/1048 ...

随机推荐

  1. 181. Employees Earning More Than Their Managers

    The Employee table holds all employees including their managers. Every employee has an Id, and there ...

  2. 一款简洁而强大的前端框架—JQuery

    jQuery是什么? jQuery是一个快速.简洁的JavaScript框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画 ...

  3. vue-cli中引入jquery方法

    这里有个详解,当然,仅仅是安装jq的话下面这个办法就够了.传送门 在webpack.base.conf.js里加入 var webpack = require("webpack") ...

  4. Nginx+PHP “No input file specified”错误的解决办法

    配置官网商城php网站时候,界面报错“No input file specified” 原理: 任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在. PHP文件 ...

  5. List 集合中 均匀的取七个点 的值

    场景: 一个未知 长度的 List 集合,可能 长度为7,10,50,100, 等等 这个时候 ,我们需要在 集合中 均匀的取七个点: 思路: n=6; int size = list.Size(); ...

  6. 基于wsimport生成代码的客户端

    概述 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦. wsimport命令 wsimport的用法 wsimport [opti ...

  7. 并发系列4-大白话聊聊Java并发面试问题之公平锁与非公平锁是啥?【石杉的架构笔记】

  8. Flask实战第59天:首页帖子布局完成

    编辑front_index.html <div id="carousel-example-generic" class="carousel slide index- ...

  9. 有的系统区apk需要对其系统签名,才能正常使用。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 向方案公司索要platform.x509.pem 和platform.pk8这两个文件. ...

  10. BZOJ 2395 [Balkan 2011]Timeismoney(最小乘积生成树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2395 [题目大意] 给出一张无向图,每条边上有a,b两个值,求生成树, 使得suma* ...