Qt开源作品40-图片及文字与base64编码互换

Posted feiyangqingyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt开源作品40-图片及文字与base64编码互换相关的知识,希望对你有一定的参考价值。

一、前言

对于图片的传输,通俗的做法一般有两种,一种是直接二进制文件传输,比如先传输开始标记,带文件名称、文件字节长度,然后挨个分包发送、最后发送文件结束标记,这种方式必须要求接收方按照自己定义的规则来接收数据生成文件,所以通用性有限,要么用http的形式请求上传文件,按照标准的文件上传机制进行处理,但是这样又限定了应用场景,比如很多时候又是需要直接底层的TCP或者UDP协议进行传输,或者直接传完就显示。

这就衍生了第二种常规做法,转换成base64编码进行传输,现有的各种语言平台开发框架,基本上都会有base64编码转换的函数或者类,毫无疑问Qt也有的,作为超大型GUI开发超市,这肯定是必须的必备的基础函数,转换到base64编码唯一缺点就是数据量增大不少。

还有一种常用的场景会用到base64编码是中文的传输,比如用tcp协议,如果双方都是utf8编码都好说,关键是很多可能是gbk编码的,你发过去未必认识,常见的串口收发中文、网络数据收发中文,都是个头疼的问题,要兼容起来最好的办法就是直接将中文转成base64编码,对方接收到以后进行base64解码,轻轻松松就搞定,我做过的公司相关的项目,还有很多第三方平台的通信,或者提供给第三方的接口规范,中文这块都按照base64编码来约定,从未出过问题。

base64编码介绍:

  1. Base64是网络上最常见的用于传输8Bit字节码的编码方式之一。
  2. Base64就是一种基于64个可打印字符来表示二进制数据的方法。
  3. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
  4. 采用Base64编码具有不可读性,需要解码后才能阅读。
  5. Base64编码可用于在HTTP环境下传递较长的标识信息。

二、主要功能

  1. 图片转base64字符串。
  2. base64字符串转图片。
  3. 字符转base64字符串。
  4. base64字符串转字符。
  5. 后期增加数据压缩。
  6. Qt6对base64编码转换进行了重写效率提升至少200%。

三、效果图

四、开源主页

以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。
本开源项目已经成功升级到V2.0版本,分门别类,图文并茂,保你爽到爆。

  1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
  2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
  3. 个人主页:https://qtchina.blog.csdn.net/
  4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

五、核心代码

#include "base64helper.h"
#include "qbuffer.h"
#include "qdebug.h"

QString Base64Helper::imageToBase64(const QImage &image)

    return QString(imageToBase64x(image));


QByteArray Base64Helper::imageToBase64x(const QImage &image)

    //这个转换可能比较耗时建议在线程中执行
    QByteArray data;
    QBuffer buffer(&data);
    image.save(&buffer, "JPG");
    data = data.toBase64();
    return data;


QImage Base64Helper::base64ToImage(const QString &data)

    return base64ToImagex(data.toUtf8());


QImage Base64Helper::base64ToImagex(const QByteArray &data)

    //这个转换可能比较耗时建议在线程中执行
    QImage image;
    image.loadFromData(QByteArray::fromBase64(data));
    return image;


QString Base64Helper::textToBase64(const QString &text)

    return QString(text.toLocal8Bit().toBase64());


QString Base64Helper::base64ToText(const QString &text)

    return QString(QByteArray::fromBase64(text.toLocal8Bit()));

以上是关于Qt开源作品40-图片及文字与base64编码互换的主要内容,如果未能解决你的问题,请参考以下文章

前端base64编码与解码

Base64编码原理及应用

Base64编码 图片与base64编码互转

C# Base64字符串转换成图片及图片转换为Base64

GoogleTagManager似乎不接受base64编码的图片

Python中的Base64编码的加密与解密