0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【C語言應(yīng)用】如何用C代碼生成二維碼?

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-08-24 19:01 ? 次閱讀

當(dāng)下因微信和支付寶等手機(jī)應(yīng)用廣泛使用,而基于二維碼/一維條碼的移動(dòng)支付,也借助手機(jī)移動(dòng)端席卷全國,使得越來越多的人知道有“二維碼”這么一種東西。

對(duì)于普通用戶而來,一般只知道將自己的二維碼展示給別人,別人使用軟件識(shí)別這個(gè)二維碼即可完成一定的功能。比如,掃碼二維碼付款、掃碼二維碼加微信好友、掃碼二維碼訪問網(wǎng)頁、掃碼二維碼下載app等等。這些個(gè)功能,在日常行為中,已經(jīng)很常見了,但作為程序猿的我們,我們?cè)趺茨懿恢蓝S碼是如何生成的呢?或者說,我要自己生成一個(gè)二維碼,除了去網(wǎng)頁上找二維碼生成工具來生成,我可以自己編碼來實(shí)現(xiàn)么?

答案,當(dāng)然是,必須可以。不然這文章不用寫了。

在介紹如何用代碼生成二維碼之前,就不得不先介紹一個(gè)開源庫叫zint。這個(gè)開源可謂牛叉的很,幾乎平時(shí)見過的“碼”,各式各樣的一維條碼、各式各樣的二維碼條碼都難不倒它,重要的是,它還是開源的,幾乎包含了所有常見“碼”的生成。以下是摘自官方用戶使用手冊(cè)的介紹片段。(筆者上一篇博文介紹zint的安裝時(shí)簡(jiǎn)單介紹了一下zint庫,如何在linux平臺(tái)安裝zint開源庫 - 架構(gòu)師李肯 - 博客園,它的開源項(xiàng)目網(wǎng)頁為Zint Barcode Generator download | SourceForge.net)

The Zint project aims to provide a complete cross-platform open source barcode generating solution. The package currently consists of a Qt based GUI, a command line executable and a library with an API to allow developers access to the capabilities of Zint. It is hoped that Zint provides a solution which is flexible enough for professional users while at the same time takes care of as much of the processing as possible to allow easy translation from input data to barcode image.

-----------------------------------------------------華麗麗的分割線-----------------------------------------------------

言歸正傳,說回如何使用zint庫生成二維碼。主要使用到以下幾個(gè)函數(shù):可以從zint.h中得到api的聲明(主要是C語言接口)。

ZINT_EXTERN struct zint_symbol* ZBarcode_Create(void);

ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol);

ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol);

ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle);

以下是個(gè)人封裝的生成二維碼的自定義接口函數(shù):

/****************************************************************************

Descpribe: Create Qrcode API with C Code by calling zint lib.

Input : pQrCodeData, the qrcode data buf

QrcodeLen, the len of qrcode data, but it can be 0

pQrCodeFile, the output file name of qrcode, it can be NULL

Output : pZintRet, to store the ret code from linzint.

Return : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE

Notes : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.

****************************************************************************/

ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet);

這個(gè)接口定義比較簡(jiǎn)單,上面也簡(jiǎn)單說了各個(gè)參數(shù)的意義,其他中特別需要注意的是,如果傳入生成二維碼圖片名字不使用默認(rèn)值時(shí)(pQrCodeFile != NULL),也務(wù)必保證pQrCodeFile必須是以.png, .eps or .svg.結(jié)尾的文件名。

以下是zint_code.c 和 zint_code.h的內(nèi)容,里面將zint中生成二維碼的幾個(gè)函數(shù)封裝在一塊了,使用者只需關(guān)注上面定義的Zint_Create_QrCode函數(shù),即可生成漂亮的二維碼圖片文件。

 ?




 1 /****************************************************************************
 2  * File       : zint_code.c
 3  * 
 4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
 5  * 
 6  * DESCRIPTION: Demo for creating qrcode by C code.
 7  * 
 8  * Modification history
 9  * --------------------------------------------------------------------------
10  * Date         Version  Author       History
11  * --------------------------------------------------------------------------
12  * 2016-10-15   1.0.0    Li.Recan     written
13  ***************************************************************************/
14  
15 // Standard Library
16 #include 
17 #include 
18 
19 // so Library
20 #include "zint.h"
21 
22 // Project Header
23 #include "zint_code.h"
24 
25 
26 /****************************************************************************
27 Descpribe: Create Qrcode API with C Code by calling zint lib.
28 Input    : pQrCodeData, the qrcode data buf
29            QrcodeLen, the len of qrcode data, but it can be 0
30            pQrCodeFile, the output file name of qrcode, it can be NULL           
31 Output   : pZintRet, to store the ret code from linzint. 
32 Return   : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE
33 Notes    : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.
34 ****************************************************************************/
35 ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet)
36 {
37     struct zint_symbol *pMySymbol     = NULL;
38     int RetCode                     = 0;    
39     
40     if(!pQrCodeData) //check input pointer
41     {
42         return ZINT_ERR_INV_DATA;
43     }
44 
45     if(QrcodeLen == 0)
46     {
47         QrcodeLen = strlen((char *)pQrCodeData);
48     }
49     if(QrcodeLen > QRCODE_MAX_LEN)//len is too long
50     {        
51         return ZINT_ERR_TOO_LONG;
52     }
53 
54     if(0 == ZBarcode_ValidID(BARCODE_QRCODE))
55     {
56         return ZINT_ERR_INV_CODE_ID;
57     }
58     
59     pMySymbol = ZBarcode_Create();
60     if(pMySymbol == NULL)
61     {
62         return ZINT_ERR_MEMORY;
63     }
64 
65     if(pQrCodeFile)//when it's NULL, outfile will be "out.png"
66     {
67         if(strstr(pQrCodeFile, "png") || (strstr(pQrCodeFile, "eps")) || (strstr(pQrCodeFile, "svg")))
68         {
69             strcpy(pMySymbol->outfile, pQrCodeFile);
70         }
71         else
72         {
73             ZBarcode_Clear(pMySymbol);
74             ZBarcode_Delete(pMySymbol); //release memory in zint lib
75             return ZINT_ERR_FILE_NAME;
76         }
77     }
78     pMySymbol->symbology     = BARCODE_QRCODE;  
79     pMySymbol->option_1     = 3; //ECC Level.It can be large when ECC Level is larger.(value:1-4)  
80     pMySymbol->scale         = 4; //contorl qrcode file size, default is 1, used to be 4   
81     pMySymbol->border_width = 2; //set white space width around your qrcode and 0 is for nothing 
82     
83     RetCode = ZBarcode_Encode_and_Print(pMySymbol, pQrCodeData, QrcodeLen, 0);    
84     ZBarcode_Clear(pMySymbol);
85     ZBarcode_Delete(pMySymbol); //release memory in zint lib
86 
87     if(pZintRet)
88     {
89         *pZintRet = RetCode; //save ret code from zint lib
90     }
91     
92     return ((0 == RetCode) ? (ZINT_OK) : (ZINT_ERR_LIB_RET));
93 }
View Code: zint_code.c




 1 /****************************************************************************
 2  * File       : zint_code.h
 3  * 
 4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
 5  * 
 6  * DESCRIPTION: API for creating qrcode by C code.
 7  * 
 8  * Modification history
 9  * --------------------------------------------------------------------------
10  * Date         Version  Author       History
11  * --------------------------------------------------------------------------
12  * 2016-10-15   1.0.0    Li.Recan     written
13  ***************************************************************************/
14  
15 #ifndef __ZINT_CODE__
16 #define __ZINT_CODE__
17 
18 #ifdef __cplusplus
19 extern "C"
20 {
21 #endif
22 
23 #include 
24 
25 #define QRCODE_MAX_LEN        500 //max string len for creating qrcode
26 
27 typedef enum 
28 {
29     ZINT_OK                 = 0,
30     ZINT_ERR_INV_DATA         = -1, //input invalid data
31     ZINT_ERR_TOO_LONG         = -2, //len for input data is too long    
32     ZINT_ERR_INV_CODE_ID     = -3,//the code type is not supported by zint
33     ZINT_ERR_MEMORY         = -4, //malloc memory error in zint lib
34     ZINT_ERR_FILE_NAME        = -5, //qrcode file isn'y end in .png, .eps or .svg.
35     ZINT_ERR_LIB_RET         = -6, //zint lib ret error, real ret code should be zint api ret code
36 }ZINT_RET_CODE;
37 
38 /****************************************************************************
39 Descpribe: Create Qrcode API with C Code by calling zint lib.
40 Input    : pQrCodeData, the qrcode data buf
41            QrcodeLen, the len of qrcode data, but it can be 0
42            pQrCodeFile, the output file name of qrcode, it can be NULL           
43 Output   : pZintRet, to store the ret code from linzint. 
44 Return   : 0 is ok, and other values are fail. See the meanings in enum ZINT_RET_CODE
45 Notes    : pQrCodeFile, Must end in .png, .eps or .svg. when isn,t NULL string.
46 ****************************************************************************/
47 ZINT_RET_CODE Zint_Create_QrCode(uint8_t *pQrCodeData, int QrcodeLen, char *pQrCodeFile, int *pZintRet);
48 
49 #define Debuging(fmt, arg...)       printf("[%20s, %4d] "fmt, __FILE__, __LINE__, ##arg)
50 
51 #ifdef __cplusplus
52 }
53 #endif
54 
55 #endif /* __ZINT_CODE__ */
?

在工程實(shí)踐中,只需要將這兩個(gè)文件添加到工程中,并讓他們參與工程編譯,即可完美使用zint生成二維碼了。

下面是一個(gè)簡(jiǎn)單的demo,將會(huì)展示如何使用這個(gè)接口函數(shù),見qrcode_test.c

/****************************************************************************
 2  * File       : qrcode_test.c
 3  * 
 4  * Copyright (c) 2011 by Li.Recan < 721317716@qq.com >
 5  * 
 6  * DESCRIPTION: Demo for creating qrcode by C code.
 7  * 
 8  * Modification history
 9  * --------------------------------------------------------------------------
10  * Date         Version  Author       History
11  * --------------------------------------------------------------------------
12  * 2016-10-15   1.0.0    Li.Recan     written
13  ***************************************************************************/
14  
15 // Standard Library
16 #include 
17 
18 // Project Header
19 #include "zint_code.h"
20 
21 int main(int argc, char *argv[])
22 {
23     int ZintLibRet             = 0; //ret code from zint lib
24     ZINT_RET_CODE ZintRet     = 0; //ret code from zint_code api
25     char QrcodeData[]         = "I love zint lib. 測(cè)試一下gbk編碼 ...";
26     char QrcodeDataDef[]     = "This's default qrcode file name : out.png ";
27     char QrcodeFile[]         = "MyQrcode.png"; // Must end in .png, .eps or .svg. //zint lib ask !
28     
29     //test with inputing qrcode_file name
30     ZintRet = Zint_Create_QrCode((uint8_t*)QrcodeData, 0, QrcodeFile, &ZintLibRet);
31     if(ZINT_OK != ZintRet)
32     {
33         Debuging("Create qrcode err, ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
34     }
35     else
36     {
37         Debuging("Create qrcode OK ! View qrcode file : %s in cur path. ZintRet = %d, ZintLibRet = %d\n", QrcodeFile, ZintRet, ZintLibRet);
38     }
39     
40     //test without inputing qrcode_file name
41     ZintRet = Zint_Create_QrCode((uint8_t*)QrcodeDataDef, 0, NULL, &ZintLibRet);
42     if(ZINT_OK != ZintRet)
43     {
44         Debuging("Create qrcode err, ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
45     }
46     else
47     {
48         Debuging("Create qrcode OK ! View qrcode file : out.png in cur path. ZintRet = %d, ZintLibRet = %d\n", ZintRet, ZintLibRet);
49     }
50     
51     return 0;
52 }

輸入完成后,使用gcc -o qrcode_test qrcode_test.c zint_code.c –lzint 即可編譯出qrcode_test的bin文件了。

等等,如果你的linux還未安裝zint庫,sorry,你將看到

那么趕緊回到上一篇博文 如何在linux平臺(tái)安裝zint開源庫 - 架構(gòu)師李肯 - 博客園 把zint安裝起來吧。

準(zhǔn)確無誤的編譯,之后,在當(dāng)前目錄ls就可以看到qrcode_test的bin文件了。

我們使用./ qrcode_test運(yùn)行我們編譯出來的demo程序,可以看到以下的提示:

[liluchang@localhost src]$ ./qrcode_test

./qrcode_test: error while loading shared libraries: libzint.so.2.4: cannot

open shared object file: No such file or directory

又出什么問題了,原來系統(tǒng)在運(yùn)行這個(gè)demo程序時(shí),沒有找到libzint.so來鏈接,那么我們只需要在運(yùn)行之前告訴系統(tǒng)去哪里找這個(gè)so即可。使用

export LD_LIBRARY_PATH=/usr/local/lib 這個(gè)路徑是根據(jù)情況而定的。【注意這個(gè)export只對(duì)當(dāng)前運(yùn)行的shell生效,一旦切換一個(gè)shell,則需要重新輸入。如果需要固定告訴運(yùn)行demo的時(shí)候去哪里找so鏈接,則可以在編譯的時(shí)候告訴它。這個(gè)點(diǎn)往后再介紹。】

之后再運(yùn)行demo程序:

第一個(gè)框框里面是demo程序打印出來的調(diào)試信息,標(biāo)識(shí)連個(gè)二維碼都生成成功了。

第二個(gè)框框可以看到,在當(dāng)前目錄下,就已經(jīng)生成了這兩個(gè)png文件,并且第二個(gè)生成的使用的是系統(tǒng)默認(rèn)的名字out.png。

為了驗(yàn)證程序生成的二維碼是否正確,我們可以使用手機(jī)去掃碼一下這兩個(gè)二維碼:

為了驗(yàn)證程序生成的二維碼是否正確,我們可以使用手機(jī)去掃碼一下這兩個(gè)二維碼:

用手機(jī)掃描出來的結(jié)果如下:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?編輯

圖中顯示的掃描結(jié)果,正好如demo中寫的

證明這代碼是可行的。

好了,本篇介紹使用C語言調(diào)用zint庫生成二維碼的教程就介紹到這里。感興趣的童鞋可以評(píng)論留言或者自行閱讀zint用戶手冊(cè)或開源項(xiàng)目介紹網(wǎng)頁詳細(xì)內(nèi)容。

后話,下篇文章將介紹zint庫一維條碼的生成,敬請(qǐng)期待。屆時(shí),zint_code.c的接口又豐富一些了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137317
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    工業(yè)級(jí)二維碼掃描模組有哪些特點(diǎn)?

    工業(yè)級(jí)二維碼掃描模組是用于各種工業(yè)環(huán)境中,快速、準(zhǔn)確地識(shí)別和解碼二維碼的關(guān)鍵設(shè)備。隨著工業(yè)4.0和物聯(lián)網(wǎng)的快速發(fā)展,工業(yè)級(jí)二維碼掃描模組的應(yīng)用范圍越來越廣泛,成為了許多自動(dòng)化和智能化生產(chǎn)線中不可或缺
    的頭像 發(fā)表于 12-02 15:02 ?144次閱讀
    工業(yè)級(jí)<b class='flag-5'>二維碼</b>掃描模組有哪些特點(diǎn)?

    工業(yè)二維碼器在電子制造業(yè)中的應(yīng)用

    工業(yè)二維碼器在電子制造業(yè)中的應(yīng)用主要體現(xiàn)在以下幾個(gè)方面:▲生產(chǎn)追溯管理工業(yè)二維碼器通過對(duì)電子產(chǎn)品上的二維碼進(jìn)行快速掃描,實(shí)現(xiàn)了高效、
    的頭像 發(fā)表于 11-13 16:19 ?227次閱讀
    工業(yè)<b class='flag-5'>二維碼</b>讀<b class='flag-5'>碼</b>器在電子制造業(yè)中的應(yīng)用

    二維碼識(shí)讀設(shè)備有哪些類型

    隨著二維碼應(yīng)用的日益普及,各類二維碼識(shí)讀設(shè)備也應(yīng)運(yùn)而生。這些設(shè)備不僅極大地方便了我們的日常生活,也為企業(yè)提供了更加高效便捷的服務(wù)。那么,你知道二維碼識(shí)讀設(shè)備都有哪些類型嗎?讓我們一起來了解一下。據(jù)
    的頭像 發(fā)表于 11-05 16:10 ?282次閱讀
    <b class='flag-5'>二維碼</b>識(shí)讀設(shè)備有哪些類型

    二維碼掃描頭設(shè)備嵌入到閘機(jī)上,實(shí)現(xiàn)掃手機(jī)屏幕完成簽到簽退

    在現(xiàn)代社會(huì),隨著科技的飛速發(fā)展,二維碼技術(shù)已經(jīng)滲透到我們生活的方方面面,特別是在門禁管理、簽到簽退等場(chǎng)景中,二維碼掃描頭設(shè)備的嵌入應(yīng)用極大地提升了管理效率和用戶體驗(yàn)。本文將探討二維碼掃描頭設(shè)備
    的頭像 發(fā)表于 09-18 15:45 ?312次閱讀
    <b class='flag-5'>二維碼</b>掃描頭設(shè)備嵌入到閘機(jī)上,實(shí)現(xiàn)掃手機(jī)屏幕<b class='flag-5'>碼</b>完成簽到簽退

    工業(yè)二維碼掃描設(shè)備如何助力流水線生產(chǎn)?

    工業(yè)二維碼掃描設(shè)備被廣泛應(yīng)用于現(xiàn)代工廠的流水線作業(yè)中,它們能夠高效、準(zhǔn)確地讀取移動(dòng)中的二維碼。這些掃器通常被設(shè)計(jì)為固定式或手持式,以適應(yīng)不同的生產(chǎn)環(huán)境和需求。固定式掃器安裝在特定位
    的頭像 發(fā)表于 08-12 14:56 ?337次閱讀
    工業(yè)<b class='flag-5'>二維碼</b>掃描設(shè)備如何助力流水線生產(chǎn)?

    如何為柜式終端設(shè)備選配(集成)二維碼模塊?

    隨著二維碼技術(shù)在各行各業(yè)的廣泛應(yīng)用,柜式終端設(shè)備如何高效集成二維碼模塊成為行業(yè)關(guān)注焦點(diǎn)。針對(duì)這一需求,本文將深入探討選擇與集成二維碼模塊的關(guān)鍵要素,助力企業(yè)精準(zhǔn)匹配,提升終端設(shè)備性能。在柜式終端設(shè)備
    的頭像 發(fā)表于 08-05 15:48 ?317次閱讀
    如何為柜式終端設(shè)備選配(集成)<b class='flag-5'>二維碼</b>模塊?

    Labview生成二維碼

    ?Labview 的一個(gè)Demo,生成二維碼。
    發(fā)表于 08-01 17:12 ?7次下載

    二維碼器/二維碼讀取設(shè)備嵌入園區(qū)閘機(jī)系統(tǒng)中的應(yīng)用

    二維碼閱讀設(shè)備集成至閘機(jī)系統(tǒng)中,主要功能是通過掃描用戶的二維碼通行證來實(shí)施園區(qū)出入口的自動(dòng)收費(fèi)。此技術(shù)憑借二維碼的便利性及掃描設(shè)備的高效性,極大地提高了收費(fèi)效率和精確度,減少了由于人為錯(cuò)誤
    的頭像 發(fā)表于 06-05 14:46 ?403次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>器/<b class='flag-5'>二維碼</b>讀取設(shè)備嵌入園區(qū)閘機(jī)系統(tǒng)中的應(yīng)用

    二維碼模塊嵌入到電梯設(shè)備里

    二維碼模塊在電梯設(shè)備中的應(yīng)用1.二維碼模塊的基本介紹二維碼模塊是一種基于自動(dòng)識(shí)別技術(shù)
    的頭像 發(fā)表于 05-08 10:40 ?383次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊嵌入到電梯設(shè)備里

    ELF 1技術(shù)貼|如何在開發(fā)板上生成二維碼圖像

    在開發(fā)應(yīng)用程序時(shí),常常需要生成二維碼以便于用戶通過掃描快速訪問信息。為了實(shí)現(xiàn)這一功能開發(fā)者通常選用QRencode專為生成二維碼圖像設(shè)計(jì)的開源庫。然而,要在特定平臺(tái)上使用QRencod
    的頭像 發(fā)表于 05-07 14:54 ?694次閱讀
    ELF 1技術(shù)貼|如何在開發(fā)板上<b class='flag-5'>生成</b><b class='flag-5'>二維碼</b>圖像

    飛凌嵌入式ElfBoard ELF 1板卡-在線二維碼生成

    在線二維碼生成器允許用戶將文本、網(wǎng)址、圖片或其他數(shù)據(jù)轉(zhuǎn)換為二維碼形式。二維碼是一種特殊類型的條形碼,它可以通過掃描來快速識(shí)別和讀取信息。在線二維碼
    發(fā)表于 04-24 17:00

    怎么在Framewin里顯示二維碼

    各位前輩好,剛剛開始使用STemWin。現(xiàn)在一個(gè)Framewin里顯示二維碼,在Framewin初始化里調(diào)用二維碼函數(shù)沒有反應(yīng)。請(qǐng)問需要怎么調(diào)用?
    發(fā)表于 04-16 08:27

    遠(yuǎn)距離二維碼掃描器如何選擇?看看以下三款遠(yuǎn)距離二維碼模塊

    隨著二維碼相關(guān)技術(shù)及硬件的普及與低成本化,二維條碼掃描設(shè)備的應(yīng)用被人們廣為熟知,應(yīng)用的行業(yè)也眾多。然而,在某些場(chǎng)景中,由于需要遠(yuǎn)距離掃描二維碼(條碼遠(yuǎn)距離識(shí)別),傳統(tǒng)的掃設(shè)備已經(jīng)無法
    的頭像 發(fā)表于 03-21 15:41 ?766次閱讀
    遠(yuǎn)距離<b class='flag-5'>二維碼</b>掃描器如何選擇?看看以下三款遠(yuǎn)距離<b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊

    哪款二維碼掃碼頭適合安裝嵌入到點(diǎn)餐機(jī)?嵌入式二維碼的掃描機(jī)器詳解

    隨著時(shí)代的發(fā)展,自動(dòng)點(diǎn)餐環(huán)境愈發(fā)智能化,其主要原因是以掃模塊、二維碼掃碼頭等嵌入式二維碼的掃描機(jī)器為核心部件的自助點(diǎn)餐機(jī)的出現(xiàn),給顧客帶來更好的操作體驗(yàn)。比如麥當(dāng)勞、肯德基的點(diǎn)餐機(jī),它提升了用戶
    的頭像 發(fā)表于 02-26 14:31 ?391次閱讀
    哪款<b class='flag-5'>二維碼</b>掃碼頭適合安裝嵌入到點(diǎn)餐機(jī)?嵌入式<b class='flag-5'>二維碼</b>的掃描機(jī)器詳解

    Labview調(diào)用Halcon識(shí)別二維碼

    Labview調(diào)用Halcon識(shí)別二維碼 可一次識(shí)別多個(gè)二維碼 使用Labview 2020編輯,halcon的版本是 19.11,32位
    發(fā)表于 02-21 16:31