日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt浅谈之三十二二维码条形码解析

發(fā)布時(shí)間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt浅谈之三十二二维码条形码解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:Qt淺談之三十二二維碼條形碼解析

一、簡(jiǎn)介

??????? 二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的,其應(yīng)用廣泛,如:產(chǎn)品防偽/溯源、廣告推送、網(wǎng)站鏈接、數(shù)據(jù)下載、商品交易、定位/導(dǎo)航、電子憑證、車(chē)輛管理、信息傳遞、名片交流、wifi共享等。
???? 一維碼是用條空在水平方向上表達(dá)信息的條碼,外形更接近矩形;二維碼可以說(shuō)是正方形,在其內(nèi)部有三個(gè)“回”字型的定位點(diǎn),可以幫助條碼設(shè)備對(duì)焦,便于讀取數(shù)據(jù)。一維碼的信息部分只能是字母和數(shù)字,它的數(shù)據(jù)容量較小一般只可容納30個(gè)字符左右。二維碼的信息承載量很大,最大數(shù)據(jù)含量可達(dá)1850個(gè)字符,信息內(nèi)容可包含,字母,數(shù)字,漢字,字符,片假名等。一維碼的常用碼制包括:EAN碼、39碼、交叉25碼、UPC碼、128碼、93碼,ISBN碼,及Codabar(庫(kù)德巴碼)等;二維碼常用的碼制有:PDF417二維條碼,Datamatrix二維條碼,QR Code,Code 49,Code 16K,Code one等。



二、詳解

1、libqrencode庫(kù)(生成二維碼)

(1)qrcodewidget.h

[html]?view plaincopy
  • #ifndef?QRCODE_H??
  • #define?QRCODE_H??
  • ??
  • #include?<QWidget>??
  • #include?<QTextCodec>??
  • ??
  • namespace?Ui?{??
  • class?QRCode;??
  • }??
  • ??
  • class?QRCodeWidget?:?public?QWidget??
  • {??
  • ????Q_OBJECT??
  • ??
  • public:??
  • ????explicit?QRCodeWidget(QWidget?*parent?=?0);??
  • ????~QRCodeWidget();??
  • ??
  • private?slots:??
  • ????void?on_pushButton_clicked();??
  • ??
  • private:??
  • ????Ui::QRCode?*ui;??
  • };??
  • ??
  • #endif?//?QRCODE_H??
  • (2)qrcodewidget.cpp

    [html]?view plaincopy
  • #include?<QPicture>??
  • #include?"qrcodewidget.h"??
  • #include?"ui_qrcode.h"??
  • #include?"qrencode.h"??
  • #include?"qrenc.c"??
  • ??
  • QRCodeWidget::QRCodeWidget(QWidget?*parent)?:??
  • ????QWidget(parent,?Qt::Dialog),??
  • ????ui(new?Ui::QRCode)??
  • {??
  • ????QTextCodec?*codec?=?QTextCodec::codecForName("utf8");??
  • ????QTextCodec::setCodecForLocale(codec);??
  • ????QTextCodec::setCodecForCStrings(codec);??
  • ????QTextCodec::setCodecForTr(codec);??
  • ????ui->setupUi(this);??
  • }??
  • ??
  • QRCodeWidget::~QRCodeWidget()??
  • {??
  • ????delete?ui;??
  • }??
  • ??
  • void?QRCodeWidget::on_pushButton_clicked()??
  • {??
  • ????QString?info?=?ui->lineEdit->text();??
  • ????if?(info.isEmpty())?{??
  • ????????return;??
  • ????}??
  • ????char?outfile[]?=?"output.png";??
  • ????margin?=?2;??
  • ????::size?=?7;??
  • ????version?=?2;??
  • ????//QRcode?*qrcode?=?QRcode_encodeString(info.toStdString().data(),?2,?QR_ECLEVEL_L,?QR_MODE_8,?0);??
  • ????//writePNG(qrcode,?outfile);??
  • ??
  • ????qrencode((unsigned?char?*)info.toStdString().data(),?info.length(),?outfile);??
  • ????ui->label_3->setPixmap(QPixmap(outfile));??
  • }??
  • (3)main.cpp

    [html]?view plaincopy
  • #include?"qrcodewidget.h"??
  • #include?<QApplication>??
  • ??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????QApplication?a(argc,?argv);??
  • ????QRCodeWidget?w;??
  • ????w.show();??
  • ??
  • ????return?a.exec();??
  • }??
  • (4)運(yùn)行

    ???????????

    ?????? 也可是使用QrenCode 的命令行工具生成二維碼,在centos6.6下執(zhí)行#?yum install qrencode(或下載qrencode-3.4.4.tar.gz使用./configure、make、make install安裝);使用qrencode -o output.png https://www.baidu.com/即可在當(dāng)前目錄下生成百度的二維碼圖片output.png;若想自定義尺寸的話,加上 -s 參數(shù),比如 -s 6 表示尺寸為 6x6 平方像表大小,qrencode -s 6 -o output.png https://www.baidu.com/。命令行下識(shí)別二維碼的是#yum install libdecodeqr-examples,libdecodeqr-simpletest <二維碼圖片>。安裝zbar-0.10.tar.bz2,也可一識(shí)別二維碼。

    ??????

    (5)源碼可從csdn上下載:http://download.csdn.net/detail/taiyang1987912/8991975。

    2、zbar庫(kù)(識(shí)別二維碼)

    ????? 下載http://sourceforge.net/projects/zbar/files/?source=navbar的源碼:zbar-0.10.tar.bz2,執(zhí)行./configure和make和make install安裝zbar,默認(rèn)安裝頭文件在/usr/local/include下,庫(kù)文件在/usr/local/lib。
    (1)qrcodezbar.h
    [html]?view plaincopy
  • #ifndef?QRCODEZBAR_H??
  • #define?QRCODEZBAR_H??
  • ??
  • #include?<QWidget>??
  • #include?<QTextCodec>??
  • #include?<QFileDialog>??
  • #include?<zbar/QZBar.h>??
  • ??
  • namespace?Ui?{??
  • class?QZbar;??
  • }??
  • ??
  • ??
  • class?QRCodeZbar?:?public?QWidget??
  • {??
  • ????Q_OBJECT??
  • ??
  • public:??
  • ????QRCodeZbar(QWidget?*parent?=?0);??
  • ????~QRCodeZbar();??
  • ??
  • private:??
  • ??
  • ??
  • private?slots:??
  • ????void?on_pushButton_clicked();??
  • ??
  • private:??
  • ????Ui::QZbar?*ui;??
  • ????zbar::QZBar?*qz;??
  • };??
  • ??
  • #endif?//?QRCODEZBAR_H??
  • (2) qrcodezbar.cpp
    [html]?view plaincopy
  • #include?"qrcodezbar.h"??
  • #include?"ui_qzbar.h"??
  • #include?"scanimage.h"??
  • #ifdef?QRDECODE??
  • ????#include?"scanimagemagick.h"??
  • #endif??
  • ??
  • QRCodeZbar::QRCodeZbar(QWidget?*parent)??
  • ????:?QWidget(parent,?Qt::Dialog)??
  • ????,?ui(new?Ui::QZbar)??
  • {??
  • ????QTextCodec?*codec?=?QTextCodec::codecForName("utf8");??
  • ????QTextCodec::setCodecForLocale(codec);??
  • ????QTextCodec::setCodecForCStrings(codec);??
  • ????QTextCodec::setCodecForTr(codec);??
  • ????ui->setupUi(this);??
  • }??
  • ??
  • QRCodeZbar::~QRCodeZbar()??
  • {??
  • ??
  • }??
  • ??
  • void?QRCodeZbar::on_pushButton_clicked()??
  • {??
  • ????QString?fileName?=?QFileDialog::getOpenFileName(this,?tr("choose?a?picture"),??
  • ????????????????????????????????????????????????????QApplication::applicationDirPath(),??
  • ????????????????????????????????????????????????????tr("all?Files?(*.*)"));??
  • ????ui->lineEdit->setText(fileName);??
  • ????ui->label_3->setPixmap(QPixmap(ui->lineEdit->text()));??
  • ????char?result[1024]?=?{0};??
  • ????#ifdef?QRDECODE??
  • ????????scanimagemagick(ui->lineEdit->text().toStdString().data(),?result);??
  • ????#else??
  • ????????scanimage(ui->lineEdit->text().toStdString().data(),?result);??
  • ????#endif??
  • ????ui->textEdit->setText(result);??
  • }??
  • (3)scanimagemagick.h
    [html]?view plaincopy
  • #ifndef?SCANIMAGEMAGICK_H??
  • #define?SCANIMAGEMAGICK_H??
  • #include?<iostream>??
  • #include?<Magick++.h>??
  • #include?<zbar.h>??
  • #define?STR(s)?#s??
  • /*****************??
  • ?*?yum?install?ImageMagick??
  • ?***********/??
  • using?namespace?std;??
  • using?namespace?zbar;??
  • ??
  • int?scanimagemagick?(const?char?*filename,?char?*result);??
  • ??
  • #endif?//?SCANIMAGE_H??
  • (4)scanimagemagick.cpp
    [html]?view plaincopy
  • #include?<stdio.h>??
  • #include?<stdlib.h>??
  • #include?<string.h>??
  • #include?"scanimagemagick.h"??
  • ??
  • int?scanimagemagick(const?char?*filename,?char?*result)??
  • {??
  • #ifdef?MAGICK_HOME??
  • ????//?http://www.imagemagick.org/Magick++/??
  • ????//????under?Windows?it?is?necessary?to?initialize?the?ImageMagick??
  • ????//????library?prior?to?using?the?Magick++?library??
  • ????Magick::InitializeMagick(MAGICK_HOME);??
  • #endif??
  • ??
  • ????//?create?a?reader??
  • ????ImageScanner?scanner;??
  • ??
  • ????//?configure?the?reader??
  • ????scanner.set_config(ZBAR_NONE,?ZBAR_CFG_ENABLE,?1);??
  • ??
  • ????//?obtain?image?data??
  • ????Magick::Image?magick(filename);??//?read?an?image?file??
  • ????int?width?=?magick.columns();???//?extract?dimensions??
  • ????int?height?=?magick.rows();??
  • ????Magick::Blob?blob;??????????????//?extract?the?raw?data??
  • ????magick.modifyImage();??
  • ????magick.write(&blob,?"GRAY",?8);??
  • ????const?void?*raw?=?blob.data();??
  • ??
  • ????//?wrap?image?data??
  • ????Image?image(width,?height,?"Y800",?raw,?width?*?height);??
  • ??
  • ????//?scan?the?image?for?barcodes??
  • ????int?n?=?scanner.scan(image);??
  • ??
  • ????//?extract?results??
  • ????for(Image::SymbolIterator?symbol?=?image.symbol_begin();??
  • ????????symbol?!=?image.symbol_end();??
  • ????????++symbol)?{??
  • ????????//?do?something?useful?with?results??
  • //????????cout?<<?"decoded?"?<<?symbol->get_type_name()??
  • //?????????????<<?"?symbol?\""?<<?symbol->get_data()?<<?'"'?<<?endl;??
  • ????????sprintf(result,?"%s:%s",?symbol->get_type_name().data(),?symbol->get_data().data());??
  • ????}??
  • ??
  • ????//?clean?up??
  • ????image.set_data(NULL,?0);??
  • ??
  • ????return(0);??
  • }??
  • (5)運(yùn)行結(jié)果
    ??
    (6) 源碼可從csdn上下載:http://download.csdn.net/detail/taiyang1987912/9001133
    (7)提示
    ?????? 打開(kāi)編譯選項(xiàng)DEFINES *= QRDECODE,則使用了ImageMagick,則需要安裝#yum install ImageMagick,并加入頭文件路徑/usr/include/ImageMagick/。若不是用 QRDECODE,用C庫(kù),再識(shí)別有些png文件時(shí)會(huì)出現(xiàn)段錯(cuò)誤。上述zbar有中文亂碼,可參考網(wǎng)上修改。

    3、QZxing庫(kù)(識(shí)別二維碼)

    ??????? 從http://sourceforge.net/projects/qzxing/files/下載QZxing的decoding library的源碼,在工程中加入include(QZXing_sourceV2.3/QZXing.pri)。
    (1)qrcondezxing.h

    [html]?view plaincopy
  • #ifndef?QRCONDEZXING_H??
  • #define?QRCONDEZXING_H??
  • ??
  • #include?<QWidget>??
  • #include?<QTextCodec>??
  • #include?<QFileDialog>??
  • ??
  • namespace?Ui?{??
  • class?QRCondeZxing;??
  • }??
  • ??
  • class?QRCondeZxing?:?public?QWidget??
  • {??
  • ????Q_OBJECT??
  • ??
  • public:??
  • ????explicit?QRCondeZxing(QWidget?*parent?=?0);??
  • ????~QRCondeZxing();??
  • ??
  • private?slots:??
  • ????void?on_pushButton_clicked();??
  • ??
  • private:??
  • ????Ui::QRCondeZxing?*ui;??
  • };??
  • ??
  • #endif?//?QRCONDEZXING_H??
  • (2)qrcondezxing.cpp
    [html]?view plaincopy
  • #include?"qrcondezxing.h"??
  • #include?"ui_qrcondezxing.h"??
  • #include?"QZXing.h"??
  • ??
  • QRCondeZxing::QRCondeZxing(QWidget?*parent)?:??
  • ????QWidget(parent),??
  • ????ui(new?Ui::QRCondeZxing)??
  • {??
  • ????QTextCodec?*codec?=?QTextCodec::codecForName("utf8");??
  • ????QTextCodec::setCodecForLocale(codec);??
  • ????QTextCodec::setCodecForCStrings(codec);??
  • ????QTextCodec::setCodecForTr(codec);??
  • ????ui->setupUi(this);??
  • }??
  • ??
  • QRCondeZxing::~QRCondeZxing()??
  • {??
  • ????delete?ui;??
  • }??
  • ??
  • void?QRCondeZxing::on_pushButton_clicked()??
  • {??
  • ????QString?fileName?=?QFileDialog::getOpenFileName(this,?tr("choose?a?picture"),??
  • ????????????????????????????????????????????????????QApplication::applicationDirPath(),??
  • ????????????????????????????????????????????????????tr("all?Files?(*.*)"));??
  • ????ui->lineEdit->setText(fileName);??
  • ????ui->label_3->setPixmap(QPixmap(ui->lineEdit->text()));??
  • ????QZXing?decoder;??
  • ????QString?qrmsg?=?decoder.decodeImageFromFile(ui->lineEdit->text());??
  • ????ui->textEdit->setText(qrmsg);??
  • }??
  • (3)運(yùn)行結(jié)果:

    ?

    (4)源碼可從csdn上下載:http://download.csdn.net/detail/taiyang1987912/8991903。

    三、條形碼/二維碼開(kāi)源軟件

    (1)二維碼掃描工具和開(kāi)發(fā)包ZBar
    ??????? ZBar是款桌面電腦用條形碼/二維碼掃描工具,支持?jǐn)z像頭及圖片掃描,支持多平臺(tái)包括 iPhone 手機(jī)。同時(shí) ZBar 提供了二維碼掃描的 API 開(kāi)發(fā)包。 ZBar 目前支持掃描,除了 Windows 平臺(tái)外,還支持 Linux 及 iPhone 平臺(tái)。網(wǎng)址:http://zbar.sourceforge.net。
    (2)C語(yǔ)言二維條形碼解析庫(kù)libqrencode
    ??????? libqrencode (QRencode) 是一個(gè)用C語(yǔ)言編寫(xiě)的用來(lái)解析二維條形碼(QR Code)的程序庫(kù),libqrencode通過(guò)手機(jī)的CCD攝像頭來(lái)掃描二維條形碼。網(wǎng)址:http://zbar.sourceforge.net。
    (3)條形碼掃描軟件 Zebra barcode reader
    ??????? Zebra barcode reader是一個(gè)小型的,分層次的條形碼掃描軟件。它支持許多流行的條碼符號(hào):EAN,UPC,128碼,39碼等。能抓獲條碼解碼圖像和使用視頻設(shè)備(如攝像頭)作為一個(gè)條形碼掃描儀。
    (4)QZXing
    ?????? Qt包裝ZXing的解碼庫(kù)。ZXing是條形碼處理類(lèi)庫(kù),它是一個(gè)開(kāi)源Java類(lèi)庫(kù)用于解析多種格式的1D/2D條形碼。目標(biāo)是能夠?qū)R編碼、Data Matrix、UPC的1D條形碼進(jìn)行解碼。 其提供了多種平臺(tái)下的客戶(hù)端包括:J2ME、J2SE和Android。網(wǎng)址:http://sourceforge.net/projects/qzxing。
    ?????? 其他參考:http://www.oschina.net/project/tag/238/barcode
    http://www.oschina.net/project/tag/238/barcode?lang=21&sort=v-

    四、總結(jié)

    (1)二維碼和條形碼的開(kāi)源軟件種類(lèi)很多,可針對(duì)C、Java、ios等不同接口來(lái)選擇自己的需求。
    (2)二維碼的庫(kù)在中文方面的也是有支持的。
    (3)源碼使用中僅僅進(jìn)行了簡(jiǎn)單的調(diào)用,沒(méi)有實(shí)現(xiàn)更深層次的開(kāi)發(fā),主要是自己沒(méi)有項(xiàng)目需求,其他的開(kāi)發(fā)讀者可繼續(xù)開(kāi)發(fā)。
    (4)若有建議,請(qǐng)留言,在此先感謝!

    總結(jié)

    以上是生活随笔為你收集整理的Qt浅谈之三十二二维码条形码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本天堂在线播放 | 婷婷午夜 | 2025国产精品| 免费a级大片| 亚洲熟妇无码一区二区三区导航 | 欧美高清videos高潮hd | 黄色aa网站 | 亚a在线| 欧美精品久久久久a | 亚洲男人第一av | 男女激情啪啪 | 曰女同女同中文字幕 | 肉嫁高柳在线 | 国产精品50页| 成人精品一区二区三区电影 | 搞黄视频在线观看 | 欧美性欧美zzzzzzzzz | 久久国产黄色片 | 天堂在线中文在线 | 天天草天天操 | 国产精品熟女一区二区不卡 | 国产午夜精品无码 | 综合激情网站 | jizz在线看| 光溜溜视频素材大全美女 | 日韩在线中文字幕视频 | 欧美黄色三级 | 国精产品一区一区三区mba下载 | 日韩成人av影院 | 91亚洲网| 亚洲av综合色区无码另类小说 | 六月婷婷中文字幕 | 黑人极品ⅴideos精品欧美棵 | 国产精品无码成人片 | 激情五月开心婷婷 | 91视频这里只有精品 | 亚洲国产看片 | xxxxhdvideos| www.久久婷婷| 国产无遮挡免费观看视频网站 | 91九色porny视频 | 片集网 | 国产欧美日韩久久 | 欧美乱妇狂野欧美在线视频 | 特大黑人娇小亚洲女mp4 | 国产中文字幕三区 | 少妇性l交大片7724com | 97狠狠| 久久久久久欧美精品se一二三四 | 精品乱 | 天天干天天操天天拍 | 午夜第一页 | 久热只有精品 | 黄色一及毛片 | 国产精品国产三级国产aⅴ原创 | 男人的天堂毛片 | 91大神小宝寻花在线观看 | 精品中文字幕视频 | 国产免费av网站 | 国产一区二区三区毛片 | 鲁一鲁av | 我的大叔 | 国产精品极品白嫩在线 | 天堂√8在线中文 | 一区二区三区中文视频 | 91狠狠爱 | 亚洲一区二区精品在线观看 | 少妇激情一区二区三区视频 | 在线免费观看日韩视频 | 国产精品乱码妇女bbbb | 日韩欧美一区二区区 | 秋霞一级视频 | 艳妇臀荡乳欲伦交换h漫 | 奇米777第四色 | 夜夜嗨av一区二区 | 中文字幕一区二区免费 | 精品人伦一区二区三区蜜桃网站 | 桃色网站在线观看 | 国产中出视频 | 国产精品久久久久久白浆 | 中文字幕av播放 | 自拍一级片 | h小视频在线观看 | 理论片大全免费理伦片 | 最新av在线网站 | 美美女高清毛片视频免费观看 | 亚洲伦理在线 | 亚洲欧洲一区二区三区 | 狠狠操2019| 蜜桃视频网站 | 亚洲一级在线观看 | 亚洲视频一区二区 | 日本成人免费在线视频 | 久久九九久久九九 | 五月天激情小说 | 日韩城人免费 | 国产极品91 | 久久国产精品偷 | 伊人久久大香线蕉成人综合网 |