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

cpp 复制代码
#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

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

cpp 复制代码
#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

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;
}
相关推荐
Theliars几秒前
C语言之字符串
c语言·开发语言
Root_Smile2 分钟前
【C++】类和对象
开发语言·c++
Reese_Cool3 分钟前
【数据结构与算法】排序
java·c语言·开发语言·数据结构·c++·算法·排序算法
一行玩python17 分钟前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
「QT(C++)开发工程师」21 分钟前
【qt版本概述】
开发语言·qt
数据小爬虫@1 小时前
利用Python爬虫获取淘宝店铺详情
开发语言·爬虫·python
高 朗1 小时前
【GO基础学习】基础语法(2)切片slice
开发语言·学习·golang·slice
寒笙LED1 小时前
C++详细笔记(六)string库
开发语言·c++·笔记
IT书架2 小时前
golang面试题
开发语言·后端·golang
初遇你时动了情2 小时前
uniapp 城市选择插件
开发语言·javascript·uni-app