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

再次之前,徐需要用到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. 按书上的例子,写了个长的go代码

    用于实现快速排序和冒泡排序的东东. 包括了蛮多东西的实现,输入输出,字符串处理等.... bubblesort.go package bubblesort func BubbleSort(values ...

  2. bzoj 1444 AC自动机 + 矩阵乘法 | 高斯消元

    恶补了一下AC自动机,花了一天时间终于全部搞明白了. 思路:将每个人的串加入AC自动机,在AC自动机生成的状态图上建边,注意单词末尾的节点只能转移到自己概率为1, 然后将矩阵自乘几十次后误差就很小了, ...

  3. ZSTU OJ 4272 最佳淘汰算法

    线段树. 处理出每个位置下一个位置是哪里.然后搞个线段树找一下最大值就可以了. #include<map> #include<set> #include<ctime> ...

  4. 洛谷——P2141 珠心算测验

    P2141 珠心算测验 题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师 ...

  5. 【Leetcode】264. Ugly Number II ,丑数

    原题 Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime facto ...

  6. 初见Python<1>:基础语法

    1.两个整数相除,计算结果的小数部分被截除,结果仍然是一个整数: 如:1/2=0 2.整数和浮点数相除.或者浮点数之间相除,结果有小数部分,仍然是一个浮点数: 如:1/2.0=0.5  1.0/2=0 ...

  7. bzoj 2137: submultiple

                                                     Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 23 ...

  8. [AGC012E]Camel and Oases

    题意:有$n$个数轴上的绿洲,给定它们的坐标,有一只骆驼想要访问所有绿洲,当它的驼峰容量为$V$时,它可以走到和当前绿洲距离$\leq V$的绿洲,并可以继续走,它也可以用一次跳跃到达任意一个绿洲,只 ...

  9. 【Splay】【启发式合并】hdu6133 Army Formations

    题意:给你一颗树,每个结点的儿子数不超过2.每个结点有一个权值,一个结点的代价被定义为将其子树中所有结点的权值放入数组排序后,每个权值乘以其下标的和.让你计算所有结点的代价. 二叉树的条件没有用到. ...

  10. rmq问题:ST表

    存板子.O(nlogn)预处理,O(1)查询.空间O(nlogn). int d[1000006][25]; int mn[1000006]; void rmq_init() { for(int i= ...