導航:首頁 > 編程語言 > zbar源代碼

zbar源代碼

發布時間:2023-03-01 16:06:54

⑴ ZBarSDK怎麼可以快速讀取和解碼

ps:在調試過程中正好蘋果發布了iOS7,於是也從Xcode 4升級了Xcode最新版,同樣真機設備也從6.1.3升級到7.0,看看會不會有兼容問題,總體來說沒有問題
下面介紹一下如何在iOS設備上使用二維碼
1.掃描二維碼(包括讀取和解碼)
掃描二維碼的開源庫有很多如 ZBar、ZXing等。博主先嘗試了ZXing,豎屏的情況下ZXing沒有問題,但是似乎橫屏會出現錯位的情況。於是博主放棄ZXing,使用ZBar。
這里要提一句,ZXing的開源做的比ZBar好,讀取和解碼速度也快,但是整合到自己的工程中是見痛苦的事情,不光是導入整個Demo工程,設置也相對繁瑣,如果不是真的需要超高性能應用的開發者,博主還是建議使用ZBar。
總的流程如下:
①下載ZbarSDK,包含ZbarSDK頭文件包、libzbar.a靜態鏈接庫文件以及資源文件三部分;
②在新工程中導入以下框架:AVFoundation.framework、CoreMedia.framework、CoreVideo.framework、QuartzCore.framework、libiconv.dylib(已存在則不需要重新加入);
③將ZbarSDK加入工程;

④檢查libzbar.a鏈接庫是否正常,如果沒有自動鏈接,需要手動加入,如下圖:

⑤在需要使用的頁面.h文件中引用頭文件#import "ZBarSDK.h"
⑥在需要使用的頁面.h中繼承 <ZBarReaderDelegate>協議
⑦在.m中實現協議的方法- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
[cpp] view plain
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
break;
[self dismissViewControllerAnimated:YES
completion:^{
}];
NSString *code = [NSString stringWithString:symbol.data];
⑧實現開始掃描的按鈕功能
[cpp] view plain
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;

ZBarImageScanner *scanner = reader.scanner;
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
[self presentViewController:reader
animated:YES
completion:^{
}];

2.生成二維碼
在生成二維碼的庫中QREncoder最為常見,但是由於中文字元的特殊性,生成中文的時候會出現一定的錯誤,所以博主改用libqrencode,是一個純C編寫的類庫,支持面也更廣泛。
①下載libqrencode源碼;
②在新工程中導入以下框架:AVFoundation.framework、CoreMedia.framework、CoreVideo.framework、QuartzCore.framework、libiconv.dylib(已存在則不需要重新加入);
③將libqrencode源碼加入工程;
④需要使用的頁面.m文件中引用頭文件#import "QRCodeGenerator.h";
⑤實現生成二維碼圖片的方法
[cpp] view plain
UIImage *image = [QRCodeGenerator qrImageForString:self.codeString imageSize:self.imageView_Code.bounds.size.width];
3.自定義掃描頁
ZXing支持自己創建掃描頁面,而由於ZBar使用的.a的鏈接庫文件,所以需要修改他生成的掃描頁,不能直接新建一個。
在上文中掃描二維碼第⑧項,對reader進行一些修改,代碼如下:
[cpp] view plain
for (UIView *temp in [reader.view subviews]) {
for (UIToolbar *toolbar in [temp subviews]) {
if ([toolbar isKindOfClass:[UIToolbar class]])
{
UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissOverlayView:)];

UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem: target:nil action:nil];

UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithTitle:@"相冊" style:UIBarButtonItemStyleBordered target:self action:@selector(clickPhotoToolBarItem:)];
NSArray *array = [NSArray arrayWithObjects:item1,item2,item3,nil];

[toolbar setItems:array animated:YES];
}
}
}
上述代碼中,取消按鈕和相冊按鈕方法等需要自己定義。方法中詳細代碼如下:
[cpp] view plain
//取消按鈕方法
- (void)dismissOverlayView:(id)sender{
[self dismissViewControllerAnimated:YES
completion:^{
}];
}
// 選取相冊
-(void)clickPhotoToolBarItem:(id)sender
{
if ([UIImagePickerController isSourceTypeAvailable:])
{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
imagePicker.sourceType = ;

[self dismissViewControllerAnimated:NO completion:^{}];
[self presentViewController:imagePicker animated:YES completion:^{}];
}
}

⑵ python2.7怎麼安裝zbar

為了virtualenv里的python能用,編譯時候要指定安裝到/usr。

編譯文件不多,一下就完了。步驟如下:

./configure –disable-video –without-qt –without-gtk –without-x –prefix=/usr

make

sudo make install

應該還需要安裝ImageMagick,libjpeg-devel,zlib-devel之類的庫,python環境里需要安裝zbar和PIL。

上測試代碼:
import zbar
from PIL import Image

scanner = zbar.ImageScanner()
scanner.parse_config('enable')
img = Image.open('./test.jpg').convert('L')
w, h = img.size
zimg = zbar.Image(w, h, 'Y800', img.tobytes())

scanner.scan(zimg)

for s in zimg:
print s.type, s.data

linux 下編譯zbar時出現問題求助 video support failed

ZBar 有個問題,對於中文二維碼的支持經常出現亂碼。ZBar 預設支持 SHIF-JIS, UTF-8, ISO8859-1 ,但是不支持 GB18030,而很多生成的二維碼都是 GB18030 (或者 GBK, GB2312)的,所以 ZBar 解碼出來就直接亂碼了

這個修改其實很簡單,只需要修改一個文件就可以了,見下面代碼。

zbar/qrcode/qrdectxt.cObjective-C
intqr_code_data_list_extract_text(constqr_code_data_list*_qrlist,
zbar_image_scanner_t*iscn,
zbar_image_t*img)
{
iconv_tsjis_cd;
iconv_tutf8_cd;
iconv_tlatin1_cd;
constqr_code_data*qrdata;
intnqrdata;
unsignedchar*mark;
intntext;
inti;
qrdata=_qrlist->qrdata;
nqrdata=_qrlist->nqrdata;
mark=(unsignedchar*)calloc(nqrdata,sizeof(*mark));
ntext=0;


/ 重點在這里,我們不要 ISO8859-1,直接換成 GB18030 就可以了

//latin1_cd=iconv_open("UTF-8","ISO8859-1");
latin1_cd=iconv_open("UTF-8","GB18030");
sjis_cd=iconv_open("UTF-8","SJIS");
utf8_cd=iconv_open("UTF-8","UTF-8");

我們下載的iphone zbar sdk 里並沒有這個文件,只有libzbar.a這就需要我們用源碼重新編譯libzbar.a

⑷ android裡面 條形碼掃描 應該是怎麼做的,有沒有源碼 什麼的,發一個給我啊

1、下載ZBar官方SDK程序(下載鏈接:http://zbar.sourceforge.net/index.html),並打開項目,如下圖:

閱讀全文

與zbar源代碼相關的資料

熱點內容
whatsapp此時無法下載 瀏覽:209
java網路位元組序轉換 瀏覽:233
美版iphone4蜂窩 瀏覽:626
word文件打開就最大化 瀏覽:998
經緯度和浮點數轉換工具 瀏覽:402
群星最新版本 瀏覽:471
歐洲童裝網站有哪些 瀏覽:783
win10默認頭像下載 瀏覽:216
dnf2017代碼大全 瀏覽:219
編程項目經理證書怎麼考 瀏覽:570
律師咨詢什麼app 瀏覽:863
ps導入ai什麼格式文件 瀏覽:255
手機升級系統的利弊 瀏覽:411
如何判斷兩列是否相同的數據 瀏覽:25
安卓系統微信文件夾 瀏覽:19
xp打開word找不到文件 瀏覽:488
文件名占容量 瀏覽:882
環型槽如何編程 瀏覽:290
excel怎麼分列每一列的第二行數據 瀏覽:240
美味餐廳13安卓版完整 瀏覽:708

友情鏈接