ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT zint一维码生成解析

2021-09-21 11:01:14  阅读:225  来源: 互联网

标签:zint QT libfile release PWD 一维 debug OUT


一、前言

本文主要讲解一维码生成的相关知识,并提供zint库编译源码(支持Windows和Linux),以及一个简单运用的Demo

二、相关知识

zint是一维码生成库,可以生成code39,code11,code128,ean13等,运用场景如超市扫描枪,书本条形码等。

zint库需依赖于zlib、libpng这两个库,所以一共需编译三个库,依赖关系如下图。

在这里插入图片描述
所以编译先后顺序为:zlib、libpng、zint,因为编译涉及很多文件的修改和包含关系等,并且源码不完全兼容,需修改,这里不详述。

①zlib库需要编译的文件如下:

SOURCES += \
    libfile/zutil.c \
    libfile/uncompr.c \
    libfile/trees.c \
    libfile/inftrees.c \
    libfile/inflate.c \
    libfile/inffast.c \
    libfile/infback.c \
    libfile/gzwrite.c \
    libfile/gzread.c \
    libfile/gzlib.c \
    libfile/gzclose.c \
    libfile/deflate.c \
    libfile/crc32.c \
    libfile/compress.c \
    libfile/adler32.c
 
HEADERS += \
    libfile/zutil.h \
    libfile/zlib.h \
    libfile/zconf.h \
    libfile/trees.h \
    libfile/inftrees.h \
    libfile/inflate.h \
    libfile/inffixed.h \
    libfile/inffast.h \
    libfile/gzguts.h \
    libfile/deflate.h \
    libfile/crc32.h

②libpng库需要编译的文件如下:

#依赖库,按照你自己的路径改
CONFIG(release, debug|release){
LIBS += -L$$OUT_PWD/../release/ -lzlib
} else: CONFIG(debug, debug|release) {
LIBS += -L$$OUT_PWD/../debug/ -lzlib
}
 
HEADERS += \
    libfile/pngstruct.h \
    libfile/pngpriv.h \
    libfile/pnginfo.h \
    libfile/pngdebug.h \
    libfile/pngconf.h \
    libfile/png.h \
    libfile/pnglibconf.h \
    libfile/zlib.h \
    libfile/zconf.h
 
SOURCES += \
    libfile/pngwutil.c \
    libfile/pngwtran.c \
    libfile/pngwrite.c \
    libfile/pngwio.c \
    libfile/pngtrans.c \
    libfile/pngtest.c \
    libfile/pngset.c \
    libfile/pngrtran.c \
    libfile/pngrio.c \
    libfile/pngread.c \
    libfile/pngpread.c \
    libfile/pngmem.c \
    libfile/pngget.c \
    libfile/pngerror.c \
    libfile/png.c \
    libfile/example.c \
    libfile/pngrutil.c

③zint库需要编译的文件如下:

#依赖库,按照你自己的路径改
CONFIG(release, debug|release){
LIBS += \
    -L$$OUT_PWD/../release/ -lzlib \
    -L$$OUT_PWD/../release/ -llibpng
} else: CONFIG(debug, debug|release) {
LIBS += \
    -L$$OUT_PWD/../debug/ -lzlib \
    -L$$OUT_PWD/../debug/ -llibpng
}
 
HEADERS += \
    libfile/png.h \
    libfile/zlib.h \
    libfile/pngconf.h \
    libfile/pnglibconf.h \
    libfile/zconf.h \
    libfile/zint.h \
    libfile/stdint_msvc.h \
    libfile/sjis.h \
    libfile/rss.h \
    libfile/reedsol.h \
    libfile/qr.h \
    libfile/pdf417.h \
    libfile/pcx.h \
    libfile/ms_stdint.h \
    libfile/maxicode.h \
    libfile/large.h \
    libfile/hanxin.h \
    libfile/gs1.h \
    libfile/gridmtx.h \
    libfile/gb18030.h \
    libfile/gb2312.h \
    libfile/font.h \
    libfile/eci.h \
    libfile/dmatrix.h \
    libfile/composite.h \
    libfile/common.h \
    libfile/code49.h \
    libfile/code1.h \
    libfile/bmp.h \
    libfile/aztec.h
 
 
SOURCES += \
    libfile/upcean.c \
    libfile/telepen.c \
    libfile/svg.c \
    libfile/rss.c \
    libfile/render.c \
    libfile/reedsol.c \
    libfile/png.c \
    libfile/raster.c \
    libfile/qr.c \
    libfile/ps.c \
    libfile/postal.c \
    libfile/plessey.c \
    libfile/pdf417.c \
    libfile/pcx.c \
    libfile/medical.c \
    libfile/maxicode.c \
    libfile/library.c \
    libfile/large.c \
    libfile/imail.c \
    libfile/hanxin.c \
    libfile/gs1.c \
    libfile/gridmtx.c \
    libfile/gif.c \
    libfile/eci.c \
    libfile/dotcode.c \
    libfile/dmatrix.c \
    libfile/dllversion.c \
    libfile/composite.c \
    libfile/common.c \
    libfile/code128.c \
    libfile/code49.c \
    libfile/code16k.c \
    libfile/code1.c \
    libfile/code.c \
    libfile/codablock.c \
    libfile/bmp.c \
    libfile/aztec.c \
    libfile/auspost.c \
    libfile/2of5.c
 
 
OTHER_FILES += \
    libfile/LICENSE

我这里建议整一个工程,按顺序编译zlib、libpng、zint库,我自己写的zint库编译源码也是这么做的(后面有链接下载),要注意各个库的生成和使用路径。
在这里插入图片描述
在这里插入图片描述
④使用方法

将zint里的zint.h文件拷贝到(需使用zint库的)工程中,在.pro工程文件加入相关库,并把zlib/libpng/zint库放到exe运行目录下。

#路径改你自己的
LIBS += \
    -L$$OUT_PWD/./debug/ -lzlib \
    -L$$OUT_PWD/./debug/ -llibpng \
    -L$$OUT_PWD/./debug/ -lzint \
//加入头文件
HEADERS  += zint.h

在这里插入图片描述
⑤一维码解析(支持一维码二维码解析)

《QT二维码生成和解析&Demo》

三、效果展示

在这里插入图片描述

四、源码(使用)简析

void MainWindow::on_pushButton_generate_clicked()
{
    //保存图片的路径
    QString strImagePath = QCoreApplication::applicationDirPath() + "//barcode.png";
    if(!ui->lineEdit->text().isEmpty())
    {
        //设置生成一维码的属性,我这里是CODE128码,可根据需要自行修改
        struct zint_symbol * my_symbol = ZBarcode_Create();
        my_symbol->symbology=BARCODE_CODE128;
        strcpy(my_symbol->outfile, strImagePath.toStdString().c_str());
        //完成一维码制作并保存
        ZBarcode_Encode(my_symbol,(unsigned char*)ui->lineEdit->text().toStdString().c_str(),0);
        ZBarcode_Print(my_symbol,0); //这个0是旋转角度
        ZBarcode_Delete(my_symbol);
 
        //在label上显示一维码图片
        QImage img;
        img.load(strImagePath.toStdString().c_str());
        QImage newImg = img.scaled(ui->label->width(),ui->label->height(), Qt::IgnoreAspectRatio);
        ui->label->setPixmap(QPixmap::fromImage(newImg));
    }
    else
    {
        QMessageBox::information(this, "Warning", "lineEdit is empty!", QMessageBox::Ok);
    }
}

五、源码Demo

①zint/zinb/libpng原生开源库(未经处理):

链接:https://pan.baidu.com/s/1QNAi77hMml0_1LXRVp-2BA
提取码:6ewn

②QT zint库编译源码(已处理,工程支持Windous/Linux自编,纯源码)

zint编译源码超链接

③zint库使用案例Demo

链接:https://pan.baidu.com/s/18caWAqaC05-hXuVDitzZXg
提取码:ldvl

标签:zint,QT,libfile,release,PWD,一维,debug,OUT
来源: https://blog.csdn.net/qq_45662588/article/details/120399580

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有