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_OBJECTpublic: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.rhkb.cn/news/448917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+uniapp的时间管理小程序的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

大厂面试一上来就手撕 Transformer,心凉半截

在这两年&#xff0c;尤其是大模型问世之后&#xff0c;有关 Transformer 的面试题不仅数量众多&#xff0c;而且颇具新意。 今日&#xff0c;我将分享 18 道 Transformer 高频面试题&#xff08;如需获取更多专业面试题&#xff0c;扫描文末二维码即可&#xff09;&#xff0…

关于为什么蒸馏后的小模型和一开始的小模型的区别是什么?

起初&#xff0c;我想写这个博客是因为无意间看到了一个采访&#xff0c;无意间浏览才发现这段说的给我一种恍然大悟的感觉。 主持人提问&#xff1a;训练一个大模型&#xff0c;然后再将其压缩蒸馏成一个小模型&#xff0c;那和直接训练一个小模型&#xff0c; 这两者的区别是…

再Android10上实现检测AHD摄像头是否接入

项目有个需要&#xff0c;需要知道tp9951是否接入AHD摄像头 1&#xff0c;驱动层可以通过读取寄存器的值来检测是否接入AHD摄像头 tp9951_write_reg(0x40, 0x00); //select decoder page tp9951_write_reg(0x41, ch); val tp9951_read_reg(TP_INPUT_STATUS_REG);…

【含文档】基于Springboot+Vue的仓库管理系统设计与实现(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

ZBrush和3D-Coat各自的优缺点是什么?

zbrush支持的模型面数高英文界面&#xff0c;3d coat支持的模型面数比zbrsh低有中文界 ZBrush优缺点 1、ZBrush优点&#xff1a; zbrush是高精度建模poser制作的首选。可搭配雕刻版使用&#xff0c;主要为烘焙高细节的铁图建模。因为是高精度模型&#xff0c;不适用于动画和游…

MySQL【知识改变命运】08

数据库约束 1&#xff1a;约束的几个类型2&#xff1a;NOT NULL非空约束3&#xff1a;UNIQUE 唯⼀约束4&#xff1a;PRIMARY KEY 主键约束4.1:回顾 5&#xff1a;FOREIGN KEY 外键约束5.1&#xff1a;创建班级表(主表)&#xff0c;并初始化数据5.2&#xff1a;重构学⽣表(从表)…

移动云智算平台,斩获两大国际知名设计奖项

近日&#xff0c;移动云一站式智算平台从全球激烈的竞争中脱颖而出&#xff0c;斩获2024年缪斯设计奖与法国设计奖两项国际知名设计大奖。这两大奖项在全球设计与创新领域颇具影响力&#xff0c;致力于表彰来自全球的优秀和原创设计作品。此次获奖&#xff0c;体现了移动云出色…

5. Node.js Http模块

2.4 Http模块 2.4.1创建Http服务端 //1.导入http模块 let http=require(http)//2.创建服务对象 let server=http.createServer((request,response)=>{console.log(request.method) //获取请求方式console.log(request.url) //获取请求url(路径和参数部份…

JavaWeb Servlet--09深入:注册系统04--修改页面

修改页面 分析&#xff1a;点击修改超链接&#xff0c;就跳转到一个修改界面&#xff0c;要显示原本的数据&#xff0c;且密码显示出来&#xff0c;在该页面将对用户的数据的进行修改&#xff0c;最后提交。 开始业务&#xff1a; 1.在web下创建一个修改界面update.jsp 写法…

蓝牙资讯|苹果AirPods Pro 2耳机推送开发者Beta固件

科技媒体 MacRumors 报道&#xff0c;苹果公司邀请开发者&#xff0c;针对 Lightning 和 USB-C 接口的 AirPods Pro 2 耳机&#xff0c;推送了新的 7B5013d 固件版本&#xff0c;较之前的 7B5013c 有所提升。 苹果未来会向所有 AirPods Pro 2 用户推送本次固件更新&#xff0…

基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析

本文探讨了Python脚本与动态模态分解(DMD)的结合应用。我们将利用Python对从OpenFOAM模拟中提取的二维切片数据进行DMD计算。这种方法能够有效地提取隐藏的流动模式,深化对流体动力学现象的理解。 使用开源CFD软件OpenFOAM,有两种方法可以对CFD数据进行DMD计算。第一种方法是直…

外卖平台开发定制全攻略:从选技术到上线运营

随着外卖行业的蓬勃发展&#xff0c;越来越多的餐饮企业希望拥有一个定制化的外卖平台&#xff0c;以便在激烈的市场竞争中脱颖而出。那么&#xff0c;如何从技术选型到平台开发再到上线运营&#xff0c;打造一个适合自身业务的外卖平台&#xff1f;本文将从开发技术、系统架构…

LLM中20种提示词策略

在大型语言模型&#xff08;LLM&#xff09;应用中&#xff0c;Prompt策略是指如何设计输入提示&#xff08;Prompt&#xff09;以引导模型生成期望的输出。以下是一些常见的Prompt策略&#xff1a; 1. 零样本提示&#xff08;Zero-Shot Prompting&#xff09; 描述: 模型在没…

微信小程序-自定义组件

文章目录 微信小程序-自定义组件概述创建和使用数据、方法和属性slot 插槽默认插槽具名插槽 组件样式注意项样式隔离 数据监听组件间通信父传子子传父获取子组件实例 生命周期组件的生命周期组件所在页面的生命周期App、Page与Component生命周期对比冷启动保留当前页面和关闭当…

Hadoop集群基础搭建

目录 一.虚拟机安装 1.配置虚拟机的ip 2.配置本机的ip 3.新建虚拟机 4.克隆三台虚拟机 二.虚拟机网络配置 1.修改ip配置 2.配置主机名和主机映射 3.配置SSH免密登陆 三.安装JDK 1.tar命令解压JDK安装包 2.配置JDK的环境变量 四.安装Hadoop 1.tar命令解压Hadoop安…

AnaTraf | 深入探秘:如何利用网络报文分析仪进行高效抓包分析

目录 什么是网络报文分析仪&#xff1f; 抓包分析的核心作用 1. 故障排除 2. 性能优化 3. 安全监测 抓包分析的常见场景与技巧 1. 分析网络延迟问题 2. 排查TCP三次握手问题 3. 分析丢包问题 总结 AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具A…

智能驾驶必备:MEB低速紧急制动功能如何保护你的车辆?

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

springboot家庭膳食生活助手小程序-计算机毕业设计源码85829

摘 要 家庭膳食生活助手系统是一个基于小程序平台的项目&#xff0c;采用springboot框架进行开发。该系统旨在帮助用户更加便捷地规划和管理家庭膳食&#xff0c;促进健康饮食和生活方式。本系统通过用户自定义的家庭成员信息和饮食偏好&#xff0c;智能生成个性化的膳食计划…

【C++】类和对象(类的默认成员函数)

目录 一.构造函数 二.析构函数 三.拷贝构造函数 四.赋值运算符重载 五.取地址运算符重载 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数。 一.构造…