• 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版本,分门别类,图文并茂,保你爽到爆。
    • Qt开源武林秘籍开发经验,看完学完,20K起薪,没有找我!
    1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
    2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
    3. 开源秘籍:https://gitee.com/feiyangqingyun/qtkaifajingyan
    4. 个人主页:https://qtchina.blog.csdn.net/
    5. 知乎主页: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()));
    }
    
  • 相关阅读:
    POJ 3411 Paid Roads(DFS)
    POJ 1699 Best Sequence(DFS)
    Codeforces Round #191 (Div. 2)
    Windows && Linux 搭建python开发环境
    zabbix 源码编译安装
    智能运维基础设施
    Redis
    ubuntu16.04 安装 mysql
    Python必须知道的基础语法
    ubuntu && CentOS && RedHat 离线安装docker
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/15578909.html
Copyright © 2020-2023  润新知