基于libqrencode的二維碼生成
libqrencode是一個C語言編寫的用來生成二維條形碼的庫拉馋,生成的二維條形碼可以通過手機(jī)的CCD攝像機(jī)輕易的掃描出來。此庫生成的二維碼的容量多達(dá)7000個數(shù)字或4000個字符惨好,并且具有很強(qiáng)的魯棒性煌茴。
QR Code example
目前,該庫的穩(wěn)定版本是3.4.4日川, 具有以下特點(diǎn):?
? ?1). 運(yùn)行時不需要其他額外的文件 - 快速的編碼 - 輸入數(shù)據(jù)的自動優(yōu)化 ? ??
? ?2).該庫只支持日本工業(yè)標(biāo)準(zhǔn)X0510:2004 或 ISO/IEC 18004所規(guī)定的QR Code model 2模式蔓腐,不支持如下功能: - ECI and FNC1 mode QR Code model 1 ? ? ??
?具體介紹詳見:http://fukuchi.org/works/qrencode/
? ? ? 言歸正傳,本文就講述如何使用該庫一步步的生成osx或ios下的二維碼 龄句。步驟如下:
?1.從http://fukuchi.org/works/qrencode/處下載穩(wěn)定的版本回论。? ? ? ?
?2.解壓下載的源代碼包,將里面所有的.h和.c文件拷貝出來放在一個文件夾中分歇,例如文件夾命名為libqrencode傀蓉。? ? ? ??
3.新建 工程,選擇OSX的Application - > Cocoa Application –>Next.
填寫好Produce Name , identifer隨便填(反正不提交App store),然后Next职抡,選擇好存放工程目錄葬燎,點(diǎn)解create創(chuàng)建工程成功.
4.將之前準(zhǔn)備好的libqrencode文件夾下文件添加到工程中。添加方法有多種,可以直接拖拽文件夾到工程谱净,會彈出如下提示框窑邦。點(diǎn)擊Finish完成添加。
5.必要的修改處理壕探。點(diǎn)擊編譯冈钦,會發(fā)現(xiàn)多處錯誤。
只看結(jié)果的可以直接刪除qrenc.c文件李请,然后跳到添加宏定義部分第(2)部分并忽略第(4)瞧筛,想看問題是如何一步一步解決的,請繼續(xù)往下看(其實(shí)最后qrenc.c文件還是要被刪除的)捻艳。????????(1)首先定位到qrenc.c文件中驾窟,發(fā)現(xiàn)`#include`一行錯誤提示文件找不到(如果機(jī)器已經(jīng)安裝了png庫,則不會有此提示)认轨。解決辦法安裝png庫绅络,這個當(dāng)然是個好主意,不過png的應(yīng)該是跟這種格式文件相關(guān)的操作嘁字,而我們的初衷是只想生成二維碼的數(shù)據(jù)恩急,具體生成圖片的格式應(yīng)該不僅僅是這一種吧,所以我們賭一把刪除此行再編譯纪蜒,神馬衷恭??纯续? 天哪宾毒,居然編譯錯誤數(shù)飆升牺勾,嗚嗚嗚。到此時,是不是內(nèi)心已經(jīng)崩潰了蹲坷,不過搞技術(shù)這一行诊胞,應(yīng)該具備面對困難庸队,不屈不饒刁卜、寵辱不驚的心態(tài)。好逢唤,讓我們硬著頭皮看下去吧拉讯。繼續(xù)在qrenc.c文件中摸索,咦鳖藕,有新發(fā)現(xiàn)哎魔慷,writePNG函數(shù)顯然是寫PNG格式文件用的,在此我們用不到著恩,嘿嘿院尔,刪掉 纹烹。
(2)繼續(xù)編譯,發(fā)現(xiàn)編譯錯誤數(shù)立馬少了好多召边。開心的不得了啊,繼續(xù)排查裹驰,其他的錯誤提示都是都是*__STATIC*未定義隧熙。工程中搜索一下__STATIC,發(fā)現(xiàn)多處函數(shù)開頭都有此定義幻林,要一一修改的話好像有點(diǎn)麻煩贞盯,工程中肯定有那么一處,只要修改了該處就可以解決問題的沪饺。這種文件一般是預(yù)編譯文件躏敢,或被共用的頭文件。找啊找整葡,找啊找件余,有一個可疑之處,每個文件都包含了這個遭居。
這不是配置文件嘛啼器,豁然開朗,這個就是配置編譯使用的頭文件俱萍。找了一下文件端壳,沒有找到,那我們就自己建一個吧枪蘑。然后有一點(diǎn)需要注意的地方损谦,必須開啟這個HAVE_CONFIG_H的宏定義。如下圖找到Preprocessor Macros
在右側(cè)添加值
至此岳颇,找個宏就被開啟了照捡,我們在config.h 文件中,定義#define __STATIC static????????(3)然后繼續(xù)編譯
這幾個是API的版本號赦役,我們都可以在config.h中定義
static const char *MAJOR_VERSION = "3";
static const char *MINOR_VERSION = "4";
static const char *MICRO_VERSION = "4";
static const char? *VERSION = "3.4.4";
(4)繼續(xù)編譯麻敌,發(fā)現(xiàn)writePNG已經(jīng)被我們刪除掉了,但是還在調(diào)用掂摔,所以刪除調(diào)用的地方术羔。再編譯一下,還有最后一處錯誤duplicate symbol _main in乙漓。 main函數(shù)重定義级历,工程里面搜索一下main,最后定位到 qrenc.c中有個main函數(shù), 額叭披。寥殖。玩讳。, 原來找個文件是工程的測試文件啊嚼贡,所以直接刪除該文件熏纯,然后編譯,哈哈哈哈粤策,通過了樟澜。庫的移植這一部分搞定了,下面就是如何使用的問題了叮盘。???????
?6.OC使用libqrencode這一部分秩贰,直接使用老外寫的一個OC分裝的生成圖片的源代碼。其實(shí)就是類似那個WritePNG柔吼,自己解析成OSX下的NSImage 或 IOS下的UIImage.????
?最后附上代碼部分:?????
OSX工程:https://github.com/FyhSky/QRCode_OC_MAC
IOS工程:https://github.com/FyhSky/QRCode_OC_IOS ? ? ?
轉(zhuǎn)載請注明出處:
http://blog.csdn.net/skynullcode?
or