目录
一.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
作为参数传递,并将返回的结果存储在名为result
的QString
变量中
4.将转换结果在Text64控件中显示
5.将传过来的text值进行文字转换成Base64值后返回
3.Base64转文字
1.获取输入框Text64中的数据
2.判断是否为空,为空直接返回
3.将text
作为参数传递,并将返回的结果存储在名为result
的QString
变量中
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)的图片文件。选择的文件路径将被存储在名为ImageName
的QString
变量中
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;
}