Qt:图片文字转base64程序

目录

一.Base64

1.编码原理

2.应用场景

3.优点

4.限制

5.变种

二.文字与Base64互转

1.ui设计

2.文字转Base64

3.Base64转文字

三.图片与Base64互转

1.ui设计

2.选择图片与图片路径

3.图片转Base64

4.Base64转图片

四.清空设置

五.效果

六.代码

base64convert.h

base64convert.cpp

base64.h

base64.cpp


一.Base64

Base64是一种基于64个可打印字符来表示二进制数据的编码方法。

1.编码原理

Base64编码通过将二进制数据每三个字节分为一组,每个字节8位,共24位。然后将这24位划分为四组,每组6位。由于6位二进制可以表示64种不同的状态(2^6=64),因此可以用64个字符来表示这些状态。标准的Base64编码表包括大写字母A-Z、小写字母a-z、数字0-9以及“+”和“/”,有时还使用“=”作为填充字符。

2.应用场景

Base64广泛应用于网络传输中,特别是在电子邮件、网页传输、数据存储等领域。它使得二进制数据可以通过文本协议安全传输,同时保持数据的完整性。

3.优点

Base64编码可以将二进制数据转换为文本形式,方便在不支持二进制数据的系统中传输和存储。同时,Base64编码后的数据可以在文本协议中安全传输,不会被误解析。

4.限制

Base64编码会导致数据膨胀,因为每3个字节的二进制数据会被编码为4个字符,增加了约33%的数据大小。Base64编码不是加密算法,不能用于保护敏感信息。如果需要保护信息安全,应该使用专门的加密技术。

5.变种

为了满足不同的应用需求,Base64有多种变种,如URL安全的Base64、Base64url等,它们通过替换某些特殊字符来避免在特定环境下的问题。

二.文字与Base64互转

1.ui设计

1拖动Label控件,分别输入文字与Base64标签;

2.拖动QLineEdit控件,设置objectName分别为Text与Text64;

3.拖动QPushButton控件,设置objectName分别为TextToBase64与Base64ToText;

2.文字转Base64

1.获取输入框Text中的数据

2.判断是否为空,为空直接返回

3.将text作为参数传递,并将返回的结果存储在名为resultQString变量中

4.将转换结果在Text64控件中显示

5.将传过来的text值进行文字转换成Base64值后返回

3.Base64转文字

1.获取输入框Text64中的数据

2.判断是否为空,为空直接返回

3.将text作为参数传递,并将返回的结果存储在名为resultQString变量中

4.将转换结果在Text控件中显示

5.将传过来的text值进行Base64转换成文字后返回

三.图片与Base64互转

1.ui设计

1拖动Label控件,分别输入图片,图片路径,Base64,Image;

2.拖动QLineEdit控件,设置objectName为Image64;

3.拖动QPushButton控件,设置objectName分别为SelectImage,ImageTo64Base,Clear,Base64ToImage;

2.选择图片与图片路径

1.选择一个符合指定格式(PNG、BMP或JPG)的图片文件。选择的文件路径将被存储在名为ImageNameQString变量中

2.如果选择的图片不为空,则将选择图片路径在ImagePath中显示

3.创建一个QPixmap对象,用于加载和显示图片

4.将图片缩放到与界面上的一个标签(假设名为Image)相同的大小,同时保持图片的纵横比不变。

3.图片转Base64

1.获取ImagePath中保存的图片路径

2.判断是否为空,为空直接返回

3.将image作为参数传递,并将返回的结果存储在名为text的QString变量中

4.将转换结果在Image64控件中显示

5.将传过来的image数据转换为Base64后返回

4.Base64转图片

1.获取Image64中保存的Base64数据

2.判断是否为空,为空直接返回

3.将data作为参数传递

4.将转换结果在Image控件中显示

5.将传过来的data数据转换后返回

四.清空设置

将所有控件中的值全部清空

五.效果

六.代码

base64convert.h

#ifndef BASE64CONVERT_H
#define BASE64CONVERT_H

#include <QWidget>
#include <QFileDialog>
#include "base64.h"

namespace Ui {
class Base64Convert;
}

class Base64Convert : public QWidget
{
    Q_OBJECT

public:
    explicit Base64Convert(QWidget *parent = 0);
    ~Base64Convert();

private slots:
    void on_TextToBase64_clicked();

    void on_Base64ToText_clicked();

    void on_SelectImage_clicked();

    void on_ImageTo64Base_clicked();

    void on_Base64ToImage_clicked();

    void on_Clear_clicked();

private:
    Ui::Base64Convert *ui;
};

#endif // BASE64CONVERT_H

base64convert.cpp

#include "base64convert.h"
#include "ui_base64convert.h"
#include <QImage>
#include <QThread>
#include "mythread.h"

Base64Convert::Base64Convert(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Base64Convert)
{
    ui->setupUi(this);
}

Base64Convert::~Base64Convert()
{
    delete ui;
}

void Base64Convert::on_TextToBase64_clicked()
{
    QString text = ui->Text->text().trimmed();
    if(text.isEmpty()){
        return;
    }
    QString result = base64::TextTo64(text);
    ui->Text64->setText(result);
}

void Base64Convert::on_Base64ToText_clicked()
{
    QString text = ui->Text64->text().trimmed();
    if(text.isEmpty()){
        return;
    }
    QString result = base64::Base64ToText(text);
    ui->Text->setText(result);
}

void Base64Convert::on_SelectImage_clicked()
{
    QString ImageName = QFileDialog::getOpenFileName(this, "选择文件", "", "图片(*.png *.bmp *.jpg)");
    if(!ImageName.isEmpty()){
        ui->ImagePath->setText(ImageName);
        QPixmap pix(ImageName);
        pix = pix.scaled(ui->Image->size() , Qt::KeepAspectRatio);\
        ui->Image->setPixmap(pix);
    }
}

void Base64Convert::on_ImageTo64Base_clicked()
{
    QString ImageName = ui->ImagePath->text().trimmed();
    if(ImageName.isEmpty()){
        return;
    }
    QImage image(ImageName);

    QString text = base64::ImageToBase64(image);

    ui->Image64->setText(text);
}

void Base64Convert::on_Base64ToImage_clicked()
{
    QString ImageName = ui->ImagePath->text().trimmed();
    QString data = ui->Image64->toPlainText().trimmed();
    if(data.isEmpty()){
        return;
    }
    QImage image = base64::TransferBase64(data);
    QPixmap pix = QPixmap::fromImage(image);
    pix = pix.scaled(ui->Image->size() , Qt::KeepAspectRatio);
    ui->Image->setPixmap(pix);
}

void Base64Convert::on_Clear_clicked()
{
    ui->Text->clear();
    ui->Text64->clear();
    ui->Image->clear();
    ui->Image64->clear();
    ui->ImagePath->clear();
}

base64.h

#ifndef BASE64_H
#define BASE64_H

#include <QObject>
#include <QImage>

class base64
{
public:
    base64();

  static  QString TextTo64(const QString &text);
  static  QString Base64ToText(const QString &text);

  static QString TransferImage(const QImage &image);
  static QByteArray ImageToBase64(const QImage &image);

  static QImage TransferBase64(const QString &data);

  static QImage Base64ToImage(const QByteArray &data);


};

#endif // BASE64_H

base64.cpp

#include "base64.h"
#include <QByteArray>
#include <QBuffer>
#include <QDebug>
base64::base64()
{

}

QString base64::TextTo64(const QString &text)
{
    return QString(text.toUtf8().toBase64());
}

QString base64::Base64ToText(const QString &text)
{
  return QString(QByteArray::fromBase64(text.toUtf8()));
}

QString base64::TransferImage(const QImage &image)
{
    return QString(ImageToBase64(image));
}

QByteArray base64::ImageToBase64(const QImage &image)
{
    QByteArray data;
    QBuffer buffer(&data);
    image.save(&buffer, "JPG");
    data = data.toBase64();
    return data;
}

QImage base64::TransferBase64(const QString &data)
{
    return Base64ToImage(data.toUtf8());
}

QImage base64::Base64ToImage(const QByteArray &data)
{
    QImage image;
    image.loadFromData(QByteArray::fromBase64(data));
    return image;
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890658.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDF编辑不求人!4款高效工具,内容修改从此变得简单又快捷

咱们现在生活在一个数字时代&#xff0c;PDF文件可不就是工作、学习还有日常生活中经常要用的东西嘛。但遇到那些需要改动的PDF文件&#xff0c;是不是就觉得有点头疼啊&#xff1f; 因为传统的PDF文件真的不好编辑&#xff0c;这确实挺烦人的。不过呢&#xff0c;我今天要给你…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第三十九章 Linux Misc驱动

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

SpringBoot下的智能健康推荐引擎

3系统分析 3.1可行性分析 通过对本基于智能推荐的卫生健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于智能推荐的卫生健康系统采用SSM框架&#…

24秋面试笔记

文章目录 一、专业技能1.1 具备扎实的Java基础&#xff0c;熟练掌握面向对象编码规范、集合、反射以及Java8特性等。1.1.1 Java基础1.1.2 集合1.1.3 Java8新特性 1.2 熟悉常用的数据结构(链表、栈、队列、二叉树等)&#xff0c;熟练使用排序、动态规划、DPS等算法。1.2.1 数据结…

CountUp.js 实现数字增长动画 Vue

效果&#xff1a; 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤&#xff1a;&#xff08;数据默认保存在/var/lib/elasticsearch下&#xff0c;自行更改&#xff09; 一、装 Java 环境 Elasticsearch 是用 Java 编写的&#xff0c;所以需要先安装 Java 运行环境。 检查系统中是…

弘景光电:以创新为翼,翱翔光学科技新蓝海

在科技日新月异的今天&#xff0c;光学镜头及模组作为智能设备的核心组件&#xff0c;其重要性日益凸显。广东弘景光电科技股份有限公司&#xff08;以下简称“弘景光电”&#xff09;正是在这一领域中&#xff0c;凭借其卓越的研发实力和市场洞察力&#xff0c;即将在创业板上…

001 Qt_从零开始创建项目

文章目录 前言什么是QtQt的优点Qt的应用场景创建项目小结 前言 本文是Qt专栏的第一篇文章&#xff0c;该文将会向你介绍如何创建一个Qt项目 什么是Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全…

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏

英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市&#xff0c;该系列专注于每瓦性能&#xff0c;比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU&#xff08;…

Unity3D 观察者模式

Unity3D 泛型事件系统 观察者模式 观察者模式是一种行为设计模式&#xff0c;通过订阅机制&#xff0c;可以让对象触发事件时&#xff0c;通知多个其他对象。 在游戏逻辑中&#xff0c;UI 界面通常会监听一些事件&#xff0c;当数据层发生变化时&#xff0c;通过触发事件&am…

LabVIEW提高开发效率技巧----状态保存与恢复

在LabVIEW开发中&#xff0c;保存和恢复程序运行时的状态是一个关键技巧&#xff0c;特别是在涉及需要暂停或恢复操作的应用中。通过使用 Flatten To String 和 Unflatten From String 函数&#xff0c;开发人员可以将程序当前的状态转换为字符串并保存&#xff0c;再在需要时恢…

决策树随机森林-笔记

决策树 1. 什么是决策树&#xff1f; 决策树是一种基于树结构的监督学习算法&#xff0c;适用于分类和回归任务。 根据数据集构建一棵树&#xff08;二叉树或多叉树&#xff09;。 先选哪个属性作为向下分裂的依据&#xff08;越接近根节点越关键&#xff09;&#xff1f;…

人工智能和机器学习之线性代数(一)

人工智能和机器学习之线性代数&#xff08;一&#xff09; 人工智能和机器学习之线性代数一将介绍向量和矩阵的基础知识以及开源的机器学习框架PyTorch。 文章目录 人工智能和机器学习之线性代数&#xff08;一&#xff09;基本定义标量&#xff08;Scalar&#xff09;向量&a…

机器视觉AI场景为什么用Python比C++多?

好多开发者在讨论机在机器视觉人工智能领域的时候&#xff0c;纠结到底是用Python还是C&#xff0c;实际上&#xff0c;Python 和 C 都有广泛的应用&#xff0c;选择 Python而不是 C 可能有以下一些原因&#xff1a; 语言易学性和开发效率 语法简洁&#xff1a; Python 语法简…

软考系统分析师知识点十:软件工程

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;27天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

【消息队列】Kafka从入门到面试学习总结

国科大学习生活&#xff08;期末复习资料、课程大作业解析、大厂实习经验心得等&#xff09;: 文章专栏&#xff08;点击跳转&#xff09; 大数据开发学习文档&#xff08;分布式文件系统的实现&#xff0c;大数据生态圈学习文档等&#xff09;: 文章专栏&#xff08;点击跳转&…

【C】C语言常见概念~

C语言常见概念 转义字符 转义字符&#xff0c;顾名思义&#xff0c;转变原来意思的字符 比如 #include <stdio.h> int main() {printf("abcndef");return 0; }输出的结果为&#xff1a; 将代码修改一下&#xff1a; #include <stdio.h> int main(…

Web安全常用工具 (持续更新)

前言 本文虽然是讲web相关工具&#xff0c;但在在安全领域&#xff0c;没有人是先精通工具&#xff0c;再上手做事的。鉴于web领域繁杂戎多的知识点&#xff08;工具是学不完的&#xff0c;哭&#xff09;&#xff0c;如果你在本文的学习过程中遇到没有学过的知识点&#xff0…

《OpenCV计算机视觉》—— 人脸检测

文章目录 一、人脸检测流程介绍二、用于人脸检测的关键方法1.加载分类器&#xff08;cv2.CascadeClassifier()&#xff09;2.检测图像中的人脸&#xff08;cv2.CascadeClassifier.detectMultiscale()&#xff09; 三、代码实现 一、人脸检测流程介绍 下面是一张含有多个人脸的…

了解高可用架构之前——CAP

CAP定理(布鲁尔定理)&#xff0c;在2000年的ACM PODC上提出的猜想 &#x1f4d3;1 CAP理论 理论描述 第一版&#xff1a;any distributed system cannot guaranty C,A and P simultaneously 对于一个分布式计算系统&#xff0c;不可能同时满足一致性(Consistence)、可用性(Ava…