最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间

做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助。

zxing是谷歌开源的二维码库,zbar,thoughtworkQRcode也是开源的,三者之间比较各有优劣

下面通过一个案例demo源码,来认识学习下这三者的实际解码效果,

第一次上传demo源码,献丑了

zbar解析关键代码:

Image primaryImage = Image.FromFile(fileName);
Bitmap pImg = MakeGrayscale3((Bitmap)primaryImage);
using (ZBar.ImageScanner scanner = new ZBar.ImageScanner())
{
List<ZBar.Symbol> symbols = new List<ZBar.Symbol>();
System.Diagnostics.Stopwatch watch = new Stopwatch();
watch.Start();
symbols = scanner.Scan((Image)pImg);
watch.Stop();
TimeSpan timeSpan = watch.Elapsed;
MessageBox.Show("扫描执行时间:" + timeSpan.TotalMilliseconds.ToString());

if (symbols != null && symbols.Count > 0)
{
string result = string.Empty;
symbols.ForEach(s => result += "条码内容:" + s.Data + " 条码质量:" + s.Type + Environment.NewLine);
MessageBox.Show(result);
}
}

zxing解析关键代码:

Image primaryImage = Image.FromFile(fileName);
Bitmap pImg = MakeGrayscale3((Bitmap)primaryImage);
BarcodeReader reader = new BarcodeReader();
System.Diagnostics.Stopwatch watch = new Stopwatch();
watch.Start();
Result result = reader.Decode((Bitmap)pImg); //通过reader解码
watch.Stop();
TimeSpan timeSpan = watch.Elapsed;
MessageBox.Show("二维码值:"+result+"扫描执行时间:" + timeSpan.TotalMilliseconds.ToString());

thoughtworkqrcode解析关键代码:

Image primaryImage = Image.FromFile(fileName);

Bitmap pImg = (Bitmap)primaryImage;// MakeGrayscale3((Bitmap)primaryImage);
try
{
System.Diagnostics.Stopwatch watch = new Stopwatch();
watch.Start();
string decodedString = new QRCodeDecoder().decode(new QRCodeBitmapImage(pImg), Encoding.UTF8);
watch.Stop();
TimeSpan timeSpan = watch.Elapsed;
MessageBox.Show("二维码值:" + decodedString + "扫描执行时间:" + timeSpan.TotalMilliseconds.ToString());
}
catch (Exception ex)
{
MessageBox.Show("好难过");
}

下面来测试下三者之间的给力程度吧,在草料二维码网页上在线生成一个二维码

为了测试给力程度,我们截出如下图片,三者对比解码:

下面来看下效果吧:

zbar效果

zxing效果

thoughtworqrcode效果

从解码的效率上来看zbar》zxing》thoughtworkqrcode

从稳定性来看zbar是最差的,zbar这个开源项目已经很久没再维护更新了,所以这也是跟不上时代的一个原因,但是效率确实比较高。

最后附上源码:源码

C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码的更多相关文章

  1. ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...

  2. Java使用Zxing生成、解析二维码工具类

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2). ...

  3. 使用zxing生成和解析二维码

    二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的: 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何 ...

  4. zxing生成和解析二维码

    今天忙了一天的二维码,用了QRcode和ZXing两个开源包.结果发现 ZXing比QRcode更好用一些,它直接可以定义二维码生成图案的大小,而QRcode生成的二维码是根据二维码包含的内容多少来定 ...

  5. 使用Google ZXing生成和解析二维码

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  6. (转)ZXing解析二维码

    1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImag ...

  7. java代码解析二维码

    java代码解析二维码一般步骤 本文采用的是google的zxing技术进行解析二维码技术,解析二维码的一般步骤如下: 一.下载zxing-core的jar包: 二.创建一个BufferedImage ...

  8. 使用zxing生成解析二维码

    1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...

  9. Java使用ZXing生成/解析二维码图片

    ZXing是一种开源的多格式1D/2D条形码图像处理库,在Java中的实现.重点是在手机上使用内置摄像头来扫描和解码设备上的条码,而不与服务器通信.然而,该项目也可以用于对桌面和服务器上的条形码进行编 ...

随机推荐

  1. 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用

    F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...

  2. jQuery中取消后续执行的内容

    <html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></title&g ...

  3. Android ORM -- Litepal(2)

    4. 更新数据 ContentValues value = new ContentValues(); value.put("name", "计算机网络2"); ...

  4. No.004:Median of Two Sorted Arrays

    问题: There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the ...

  5. IT基础架构规划方案一(网络系统规划)

    背景                   某集团经过多年的经营,公司业务和规模在不断发展,公司管理层和IT部门也认识到通过信息化手段可以更好地支撑公司业务运营.提高企业生产和管理效率.同时随着新建办公 ...

  6. BCS 字段显示格式化

    技术部分 1.使用SPD添加外部数据源时保证,安装SPD的客户机在同一个域中,并且在管理中心给Business Data Connectivity Service 授权   2.生成的外部数据没法再后 ...

  7. ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector            listView每项在选中.按下等不同状态时的Drawable divider            ...

  8. iOS网络1——NSURLConnection使用详解

    原文在此 一.整体介绍 NSURLConnection是苹果提供的原生网络访问类,但是苹果很快会将其废弃,且由NSURLSession(iOS7以后)来替代.目前使用最广泛的第三方网络框架AFNetw ...

  9. Laravel大型项目系列教程(二)之用户管理

    Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能. 二.Let's go 1.创建用户注册视图 $ php artisan generate:v ...

  10. Linux下,拷贝文件时,排除某些文件

     一下是自己用到到几次实践,觉得很赞:   1.拷贝文件时,排除某些不需要的文件:   1)使用xargs来做: ls /tmp/test/ |grep -v .gz |xargs -i cp -r ...