基於libqrencode的二維碼生成

基於libqrencode的二維碼生成

        libqrencode是一個C語言編寫的用來生成二維條形碼的庫,生成的二維條形碼可以通過手機的CCD攝像機輕易的掃描出來。此庫生成的二維碼的容量多達7000個數字或4000個字符,並且具有很強的魯棒性。

QR Code example

        目前,該庫的穩定版本是3.4.4, 具有以下特點:

  • 運行時不需要其他額外的文件
  • 快速的編碼
  • 輸入數據的自動優化

        該庫只支持日本工業標準X0510:2004 或 ISO/IEC 18004所規定的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/處下載穩定的版本。
        2.解壓下載的源代碼包,將裏面所有的.h和.c文件拷貝出來放在一個文件夾中,例如文件夾命名爲libqrencode。
        3.新建 工程,選擇OSX的Application - > Cocoa Application –>Next.

        填寫好Produce Name , identifer隨便填(反正不提交App store),然後Next,選擇好存放工程目錄,點解create創建工程成功.

        4.將之前準備好的libqrencode文件夾下文件添加到工程中。
添加方法有多種,可以直接拖拽文件夾到工程,會彈出如下提示框。點擊Finish完成添加。

        5.必要的修改處理。點擊編譯,會發現多處錯誤。

        只看結果的可以直接刪除qrenc.c文件,然後跳到添加宏定義部分第(2)部分並忽略第(4),想看問題是如何一步一步解決的,請繼續往下看(其實最後qrenc.c文件還是要被刪除的)。

        (1)首先定位到qrenc.c文件中,發現#include <png.h>一行錯誤提示文件找不到(如果機器已經安裝了png庫,則不會有此提示)。解決辦法安裝png庫,這個當然是個好主意,不過png的應該是跟這種格式文件相關的操作,而我們的初衷是隻想生成二維碼的數據,具體生成圖片的格式應該不僅僅是這一種吧,所以我們賭一把刪除此行再編譯,神馬??? 天哪,居然編譯錯誤數飆升,嗚嗚嗚。到此時,是不是內心已經崩潰了,不過搞技術這一行,應該具備面對困難,不屈不饒、寵辱不驚的心態。好,讓我們硬着頭皮看下去吧。繼續在qrenc.c文件中摸索,咦,有新發現哎,writePNG函數顯然是寫PNG格式文件用的,在此我們用不到,嘿嘿,刪掉 。

        (2)繼續編譯,發現編譯錯誤數立馬少了好多。開心的不得了啊,繼續排查,其他的錯誤提示都是都是__STATIC未定義。工程中搜索一下__STATIC,發現多處函數開頭都有此定義,要一一修改的話好像有點麻煩,工程中肯定有那麼一處,只要修改了該處就可以解決問題的。這種文件一般是預編譯文件,或被共用的頭文件。找啊找,找啊找,有一個可疑之處,每個文件都包含了這個。

        這不是配置文件嘛,豁然開朗,這個就是配置編譯使用的頭文件。找了一下文件,沒有找到,那我們就自己建一個吧。然後有一點需要注意的地方,必須開啓這個HAVE_CONFIG_H的宏定義。
如下圖找到Preprocessor Macros

        在右側添加值

        至此,找個宏就被開啓了,我們在config.h 文件中,定義#define __STATIC static
        (3)然後繼續編譯

        這幾個是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)繼續編譯,發現writePNG已經被我們刪除掉了,但是還在調用,所以刪除調用的地方。再編譯一下,還有最後一處錯誤duplicate symbol _main in。 main函數重定義,工程裏面搜索一下main,最後定位到 qrenc.c中有個main函數, 額。。。, 原來找個文件是工程的測試文件啊,所以直接刪除該文件,然後編譯,哈哈哈哈,通過了。庫的移植這一部分搞定了,下面就是如何使用的問題了。
        6.OC使用libqrencode這一部分,直接使用老外寫的一個OC分裝的生成圖片的源代碼。
其實就是類似那個WritePNG,自己解析成OSX下的NSImage 或 IOS下的UIImage.

        最後附上代碼部分:

        OSX工程:https://github.com/FyhSky/QRCode_OC_MAC

        IOS工程:https://github.com/FyhSky/QRCode_OC_IOS

        轉載請註明出處:http://blog.csdn.net/skynullcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章