旅游门户网站建设意义,温州网站制作系统,个人网站怎么做游戏,北京seo优化费用我有一个Linux 环境 V3S的qrm开发板#xff0c;我需要在开发板上实现一个生成二维码的功能#xff0c;于是想到了qrencode 这个库。
过程如下#xff1a;
1#xff0c;下载qrencode 源码(自行百度下载)
2#xff0c;打开源码#xff0c;可以看到源码里有一个configure…我有一个Linux 环境 V3S的qrm开发板我需要在开发板上实现一个生成二维码的功能于是想到了qrencode 这个库。
过程如下
1下载qrencode 源码(自行百度下载)
2打开源码可以看到源码里有一个configure 的配置文件
这个文件就是斌阿姨qrencode.so文件的关键配置文件如果我们想编译当前ubuntu 的linux环境下的.so文件那么我们只需要执行
./configure make sudo make install
就可以将编译出来的so库安装到当前ubuntu电脑里如果想指定安装路径只需要
执行如下指令:
./configure --prefix/path/to/install/directory make sudo make install 可以看到执行配置文件的时候多了一个路径
3那么如何编译V3S开发板环境下的libqrencode.so呢
此时我们就需要根据自己的交叉环境进行配置了。
我自己写了一个脚本脚本内容如下:
#!/bin/sh
export CC/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-gcc
export CXX/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-g
export AR/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ar
export AS/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-as
export LD/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ld
export RANLIB/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-ranlib
export STRIP/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-buildroot-linux-gnueabihf-strip./configure --hostarm-linux-gnueabihf --prefix/home/wangxiaojing/qrencode-4.1.1/arm
在make 之前我先执行这个脚本就可以生成arm版本的.so文件
其中 /home/wangxiaojing/qrencode-4.1.1/ 是我的源码目录我在改目录下新建了一个arm目录
编译完成后就会生成libqrencode.so 以及各种编译后的文件到这个目录里
可以看到export CC export CXX AR LD 等这些环境变量都设置成了自己交叉编译环境的路径可根据自己环境惊醒配置这样就可以编译出适配自己开发板的.so文件
4代码如何实现生成二维码的功能。这里我封装成一个方法如下
void generateMonoQRCode(const QString data, const QString filePath)
{QRcode* qrcode QRcode_encodeString(data.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1);if (qrcode ! nullptr) {QImage image(qrcode-width, qrcode-width, QImage::Format_Mono);for (int y 0; y qrcode-width; y) {for (int x 0; x qrcode-width; x) {unsigned char b qrcode-data[y * qrcode-width x];image.setPixel(x, y, b0x01 ? 0 : 1);}}QImageWriter writer(filePath, png);writer.write(image);QRcode_free(qrcode);}
}
传入要生成二维码的数据和要生成文件的路径就可以生成一个二维码到这个路径下面路径是包含文件名的。
生成后的图片可能大小尺寸可能过大或过小此时我们需要再写一个方法用来改变这个二维码的大小
void scaleImage(const QString inputFilePath, int scaledWidth, int scaledHeight,QString outputFilePath) {// 加载图片QImage inputImage(inputFilePath);if (inputImage.isNull()) {qDebug() 图片加载失败;return ;}// 缩放图片QImage scaledImage inputImage.scaled(scaledWidth, scaledHeight);// 保存缩放后的图片if (scaledImage.save(outputFilePath, PNG)) {qDebug() 图片缩放成功保存路径为 outputFilePath endl;} else {qDebug() 图片缩放失败;return ;}}
需要引入头文件
#include QTextCodec
#include QPainter
#include QImage
#include QWidget
#include qrencode.h
#include QImageWriter 完