最近做項目需要解析二維碼圖片,找了一大圈,發現沒有人去整理下開源的幾個庫案例,花了點時間
做了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這個開源項目已經很久沒再維護更新了,所以這也是跟不上時代的一個原因,但是效率確實比較高。
最后附上源碼:源碼