ZXing 二维码解析生成工具类(未测试)
来源:互联网 发布:易语言源码网 编辑:程序博客网 时间:2024/06/05 22:42
[Java]代码
import com.google.zxing.*;import com.google.zxing.Reader;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;import com.google.zxing.multi.GenericMultipleBarcodeReader;import com.google.zxing.multi.MultipleBarcodeReader;import javax.imageio.ImageIO;import java.io.*;import java.nio.file.FileSystems;import java.nio.file.Path;import java.util.*;/** * 二维码生成工具类 * * @author KisChang * @version 1.0 * @date 2015年12月03日 * @since 1.0 */public class ZXingUtils { public static enum ImageType { JPEG("jpeg"),PNG("png"),GIF("gif"); private String value; ImageType(String value) { this.value = value; } public String getValue() { return value; } } /**编码*/ public static class Encode { private static Map<EncodeHintType, Object> HINTS; static { HINTS = new EnumMap<EncodeHintType,Object>(EncodeHintType.class); HINTS.put(EncodeHintType.CHARACTER_SET, "UTF-8"); } /** * 生成二维码 * @param widthAndHeight 高宽 * @param content 二维码内容 * @param os 输出流 */ public static void buildQRCode(int widthAndHeight, String content, OutputStream os, ImageType imageType) throws WriterException, IOException { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, HINTS);// 生成矩阵 MatrixToImageWriter.writeToStream(bitMatrix, imageType.getValue(), os); } public static void buildQRCode(String content, OutputStream os, ImageType imageType) throws WriterException, IOException { buildQRCode(200, content, os, imageType); } /** * 生成二维码 * @param widthAndHeight 高宽 * @param content 二维码内容 * @param filePath 输出目录 * @param fileName 输出文件名 * @param imageType 输出文件类型 */ public static void buildQRCode(int widthAndHeight, String content, String filePath, String fileName, ImageType imageType) throws WriterException, IOException { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, HINTS); Path path = FileSystems.getDefault().getPath(filePath, fileName); MatrixToImageWriter.writeToPath(bitMatrix, imageType.getValue(), path);// 输出图像 } public static void buildQRCode(String content, String filePath, String fileName, ImageType imageType) throws WriterException, IOException { buildQRCode(200, content,filePath,fileName,imageType); } } /**解码*/ public static class Decode { private static final Map<DecodeHintType,Object> HINTS; private static final Map<DecodeHintType,Object> HINTS_PURE; static { HINTS = new EnumMap<DecodeHintType,Object>(DecodeHintType.class); HINTS.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); HINTS.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet.allOf(BarcodeFormat.class)); HINTS_PURE = new EnumMap<DecodeHintType,Object>(HINTS); HINTS_PURE.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); } /** * 解析二维码 */ public static Collection<Result> readQRCode(File qrCode) throws ReaderException, IOException { FileInputStream inputStream = new FileInputStream(qrCode); return readQRCode(inputStream); } public static Collection<Result> readQRCode(InputStream inputStream) throws ReaderException, IOException { LuminanceSource source = new BufferedImageLuminanceSource(ImageIO.read(inputStream)); BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); Collection<Result> results = new ArrayList<Result>(1); ReaderException savedException = null; Reader reader = new MultiFormatReader(); try { //寻找多个条码 MultipleBarcodeReader multiReader = new GenericMultipleBarcodeReader(reader); Result[] theResults = multiReader.decodeMultiple(binaryBitmap, HINTS); if (theResults != null) { results.addAll(Arrays.asList(theResults)); } } catch (ReaderException re) { savedException = re; } if (results.isEmpty()) { try { //寻找纯条码 Result theResult = reader.decode(binaryBitmap, HINTS_PURE); if (theResult != null) { results.add(theResult); } } catch (ReaderException re) { savedException = re; } } if (results.isEmpty()) { try { //寻找图片中的正常条码 Result theResult = reader.decode(binaryBitmap, HINTS); if (theResult != null) { results.add(theResult); } } catch (ReaderException re) { savedException = re; } } if (results.isEmpty()) { try { //再次尝试其他特殊处理 BinaryBitmap hybridBitmap = new BinaryBitmap(new HybridBinarizer(source)); Result theResult = reader.decode(hybridBitmap, HINTS); if (theResult != null) { results.add(theResult); } } catch (ReaderException re) { savedException = re; } } if (results.isEmpty()){ throw savedException; }else { return results; } } public static Result readQRCodeResult(File qrCode) throws ReaderException, IOException { FileInputStream inputStream = new FileInputStream(qrCode); return readQRCodeResult(inputStream); } public static Result readQRCodeResult(InputStream inputStream) throws ReaderException, IOException { Collection<Result> results = readQRCode(inputStream); if (!results.isEmpty()){ //寻找结果集中非空的结果 for (Result result : results){ if (result != null){ return result; } } } throw NotFoundException.getNotFoundInstance(); } }}
0 0
- ZXing 二维码解析生成工具类(未测试)
- ZXing二维码生成工具类
- 使用ZXing工具类生成和解析二维码
- Java使用Zxing生成、解析二维码工具类
- 利用ZXing生成二维码的工具类
- 利用ZXing生成二维码的工具类
- java zxing 生成二维码工具类
- 利用ZXing生成二维码的工具类
- Zxing生成二维码经典解析
- ZXING生成二维码以及解析
- zxing 二维码生成与解析
- 超简单zxing工具生成二维码和解析二维码,欢迎小白。
- Android工具类: 基于Zxing的二维码生成和展示
- google zxing作为二维码生成工具
- java二维码工具类:生成二维码和解析二维码
- 用com.google.zxing生成、解析二维码
- 使用zxing 生成和解析二维码
- zxing实现二维码生成和解析
- Linux文件属性与权限
- js判断是否输入的是年份 (未测试)
- Design Pattern: Iterator and Adaptor
- js 相关笔记
- 最全的对话框(Dialog)用法汇总
- ZXing 二维码解析生成工具类(未测试)
- hdu 5742 It's All In The Mind
- FTP命令详解
- AngularJs实现checkbox的全选、全取消
- 免费IP地址查询
- 2016夏季练习——最小生成树
- thread_Synchronized2(同步与互斥2)
- iOS之 深究extern,static的用法和作用
- Android Fragment嵌套使用存在的一些BUG以及解决方法