20180406初次接触二维码识别程序QZXing

好奇驱使,百度百科了一下二维码,然后想尝试通过编程识别几个维码。
第一步是找到合适的二维码识别程序。伟大的程序员们已经把二维码识别程序开源了,我选择了gooogle公司的ZXing。
https://github.com/zxing/zxing
介绍就一句话:ZXing ("Zebra Crossing") barcode scanning library for Java, Android
翻译过来是:ZXing是一个条码扫描库,支持Java和Android。

这个支持的条码格式如下表:
1D product1D industrial2D(二维码)
UPC-ACode 39QR Code
UPC-ECode 93Data Matrix
EAN-8Code 128Aztec (beta)
EAN-13CodabarPDF 417 (beta)
 ITFMaxiCode
 RSS-14 
 RSS-Expanded

还有一些基于ZXing的第三方程序,它们适配各种编程语言。因为,我习惯用C/C++开发程序,且最近正在学习QT,所以选择了QZXing。
第二步是使用QZXing。我在https://github.com/ftylitak/qzxing/releases页面下载了QZXing_sourceV2.4.zip,只有353KB,太好了,因为我的歌华宽带访问github.com的速度真是太慢了,不知你们的怎么网速怎么样?解压后,用Qt Createor打开其中的工程,编译出Debug版。在build-QZXing-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug目录下得到2个重要文件:libQZXing2.a(等同于lib文件)和QZXing2.dll(不用解释了吧)。然后在我的工程中添加库,选择libQZXing2.a即可。帖上代码:
QString fileName = QFileDialog::getOpenFileName(this,
          tr("打开二维码文件"), NULL, tr("二维码文件 (*.png *.jpg *.bmp)"));
    QZXing *qZxing = new QZXing(this);
    //qZxing->setDecoder(QZXing::DecoderFormat_QR_CODE | QZXing::DecoderFormat_EAN_13 );
    QImage imageToDecode(fileName);
    QString strCode = qZxing->decodeImage(imageToDecode);
     //QString strCode = qZxing->decodeImageFromFile(fileName);//TODO 失败了
     ui->ed2DCode->setText(strCode);
    int with = ui->lb2DCode->width();
    int height = ui->lb2DCode->height();
    //QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);  // 饱满填充
    QImage fitpixmap = imageToDecode.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);  // 按比例缩放
    ui->lb2DCode->setPixmap(QPixmap::fromImage(fitpixmap));
代码的意思是选择一个二维码文件,得到其QImage对象,然后用QZXing去解码这个QImage对象,得到一个QString,后面的代码是在QLable中按比例缩放显示二维码文件。需要说明的是采用qZxing->decodeImageFromFile只得到一个空字符串。不去深究了,有能工作的就OK了。以下是我解码的几个二维码。
       首先是网页版微信登录使用的二维码,它对应的文字是https://login.weixin.qq.com/l/wfzgb86dKA==
      第二个是我的微信二维码,它对应的文字是https://u.wechat.com/EALebLzIfjaNxLdx4MP1prA
展开阅读全文

没有更多推荐了,返回首页