当前位置: 首页 > article >正文

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;
}




http://www.kler.cn/news/353386.html

相关文章:

  • 告别微信封号!学会这5招,让你的账号坚不可摧
  • Golang 并发编程入门:Goroutine 简介与基础用法
  • 深入解析JavaScript中的箭头函数及其在React中的应用(箭头函数与传统函数的区别、如何在不同上下文中使用箭头函数)
  • C语言数据结构之双向链表(LIST)的实现
  • 2410C++,不能统一成员函数与普通函数
  • AutoFixture:.NET 的假数据生成工具
  • 云栖实录 | 智能运维年度重磅发布及大模型实践解读
  • Docker配置网站环境
  • Redis 消息队列:实现、操作与性能优化
  • 【SSM详细教程】-01-Spring容器以及配置详解
  • C#从零开始学习(Head First C#)
  • 【论文阅读笔记】The Chubby lock service for loosely-coupled distributed systems
  • Spring Boot环境下的大创项目协作工具
  • 2024ideaUI切换和svn与git的切换
  • Floyd
  • 文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
  • C++ | Leetcode C++题解之第476题数字的补数
  • ThinkPHP 3.2 + Nginx 页面404问题
  • 可以在桌面上用的倒计时提醒app下载
  • 什么是NLP?
  • 完全指南:如何高效进行业务应用开发?
  • 解决VScode(Visual Studio Code)中的乱码问题. 2024-10-13
  • 汽车管理系统——级联下拉框
  • 在 Android Studio 中引入android.os.SystemProperties
  • 计算机网络自顶向下(3)---TCPsocket
  • 2024.10.16 软考学习笔记