base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍

io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法,但它们的目的和使用场景有所不同。

1) io.BytesIO

io.BytesIO 是 Python io 库中的一个类,它提供了一个在内存中处理二进制数据的接口,模拟了一个文件对象。它允许你像操作文件一样操作内存中的二进制数据,这对于处理图像、音频、视频等二进制数据非常有用。BytesIO 对象可以用于读取和写入数据,并且可以轻松地将数据转换为字节字符串。

使用 BytesIO 的优点:

  • 在内存中处理数据,不需要磁盘I/O。
  • 可以轻松地将数据流转换为字节字符串或字节对象。
  • 适用于需要在程序内部传递二进制数据的场景。

2) Base64 编码

Base64 是一种编码方案,用于将二进制数据转换为可打印的ASCII字符。这种编码通常用于在不支持二进制数据的通信环境中传输二进制数据,如电子邮件、HTTP等。Base64 编码后的字符串长度会增加约33%,因为它使用64个字符来表示6个二进制位(即3个二进制字节)。

使用 Base64 编码的优点:

  • 可以在不支持二进制数据的环境中传输二进制数据。
  • 编码后的字符串是可打印的ASCII字符,可以在文本环境中安全传输。
  • 可以用于在Web应用中传输图像和其他二进制文件。

区别

  • 用途BytesIO 主要用于在内存中处理二进制数据流,而Base64编码主要用于在文本环境中传输二进制数据。
  • 数据表示BytesIO 直接处理原始的二进制数据,而Base64编码将二进制数据转换为ASCII字符。
  • 数据大小:使用 BytesIO 处理的数据大小不会改变,而Base64编码后的数据大小会增加约33%。
  • 传输效率:在需要传输二进制数据的场景中,Base64编码可能会增加传输的开销,因为它需要额外的编码和解码步骤。

在处理图像时,BytesIO 通常用于图像处理库(如Pillow)中,用于读取和写入图像数据。而Base64编码则常用于Web开发中,用于在HTTP请求和响应中传输图像数据。

1、base64 图片进行编码、解码

编码

import base64# 假设您有一个图像文件,例如 'image.jpg'
with open(r"C:\Users\l****1686722996428308480-1 (1).jpg", 'rb') as image_file:# 读取图像文件的二进制数据image_data = image_file.read()# 将二进制数据编码为Base64字符串encoded_string = base64.b64encode(image_data).decode('utf-8')print(encoded_string)

解码

import base64
from PIL import Image
from io import BytesIO# Base64 编码的字符串
base64_string = encoded_string# 去除头部信息并进行解码
image_data = base64.b64decode(base64_string)# 创建 BytesIO 对象来保存解码后的数据
buffered_io = BytesIO()
buffered_io.write(image_data)# 打开图片文件
img = Image.open(buffered_io)# 显示图片(如果需要)
img.show()

在这里插入图片描述

2、BytesIO图片进行编码、解码

编码:

from PIL import Image
import io# 读取图像文件
image_path = r"C:\Users\l****1973_status_1686722996428308480-1 (1).jpg"
with Image.open(image_path) as img:# 将图像保存到BytesIO对象中output = io.BytesIO()img.save(output, format='JPEG')output.seek(0)  # 将指针移回文件开头output

解码:

# 读取BytesIO对象中的数据
image_data = output.read()# 将二进制数据解码回图像
decoded_img = Image.open(BytesIO(image_data))# 显示图像
decoded_img# 保存解码后的图像
decoded_img.save('decoded_image.jpg')

3、api调用

参考:https://blog.csdn.net/weixin_42357472/article/details/135528846?spm=1001.2014.3001.5501

flask后端接口

from flask import Flask, requestapp = Flask(__name__)@app.route('/receive-base64', methods=['POST'])
def receive_base64():# 从POST请求中获取Base64编码的字符串base64_string = request.form.get('data')if base64_string:# 这里可以添加处理Base64字符串的逻辑,例如解码或存储print(f"Received Base64 string: {base64_string}")# 返回确认消息return "Base64 string received successfully."else:# 如果没有接收到Base64字符串,返回错误消息return "No Base64 string received."if __name__ == '__main__':app.run(debug=True)

requests请求

import requests
import base64# 假设你有一个Base64编码的字符串
base64_string = "your_base64_encoded_string_here"# 将Base64字符串转换为字节对象
data_bytes = base64.b64decode(base64_string)# 构建请求的payload
payload = {'data': data_bytes
}# 发送POST请求
response = requests.post('http://your-flask-server-address/receive-base64', files=payload)# 打印响应内容
print(response.text)

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

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

相关文章

Linux最常用的几个时间日期命令

文章目录 Linux最常用的几个时间日期命令一日难再晨及时当勉励 date默认输入显示时区世界协调时格式化日期 时光总是催人老 time语法示例 休息一会 sleep休息5分钟1小时后提醒我时分秒搭配使用倒计时计时器结合脚本 更多信息 Linux最常用的几个时间日期命令 桃花谢了春红&…

如何在Docker本地搭建流程图绘制神器draw.io并实现公网远程访问

推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 前言 提到流程图,大家第一时间可能会想到Visio,不可否认,VIsio确实是功能强大,但是软…

C++里main函数int main(int argc, char **argv)

C里main函数int main(int argc, char **argv), 这两个参数argc和argv分别是什么

Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?

<el-tree-selectv-model"form.topmneu":data"tableData":props"{ label: title, value: id }":render-after-expand"false"style"width: 100%"check-strictly/> 添加 :props "{ lable : 字段名 , value: 字段…

极客时间-读多写少型缓存设计

背景 内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记&#xff0c;欢迎大家学习&#xff01;https://time.geekbang.org/column/article/596644 总览内容如下&#xff1a; 缓存性价比 一般来说&#xff0c;只有热点数据放到缓存才更有价值 数据量查询频率命中…

java基础之异常练习题

异常 1.Java 中所有的错误/异常都继承自 Throwable类&#xff1b;在该类的子类中&#xff0c; Error 类表示严重的底层错误&#xff0c; 对于这类错误一般处理的方式是 直接报告并终止程序 &#xff1b; Exception 类表示异常。 2.查阅API&#xff0c;完成以下填空&#xff1a;…

leetcode动态规划(零钱兑换II、组合总和 Ⅳ)

518.零钱兑换II 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111 示例 2: 输入: amount 3, coi…

【江科大STM32单片机】day1点亮LED灯流水灯蜂鸣器

知识点 推挽模式&#xff1a;高-》低、低-》高电平都能驱动 开漏模式&#xff1a;只能低-》高电平能驱动&#xff0c;高电平相当于高阻态 GPIO_WriteBit 操作单个 GPIO_ResetBits 操作同组 3-2 led闪烁 配置相关驱动 USE_STDPERIPH_DRIVER 配置输出文件格式debug配置slink勾选…

基于Springboot的课程答疑系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的课程答疑系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

Python知识点(史上最全)

Python期末考试知识点&#xff08;史上最全&#xff09; python简介 Python是一种解释型语言 Python使用缩进对齐组织代码执行&#xff0c;所以没有缩进的代码&#xff0c;都会在载入时自动执行 数据类型&#xff1a;整形 int 无限大 浮点型 float…

小程序基础学习(组件化)

&#xff08;一&#xff09;创建 找到components文件夹下面创建新的文件夹 然后再文件夹内创建component格式的文件 创建后这样 我创建的是my-info的文件夹以及my-info的components文件&#xff0c;跟着普通的页面一样 &#xff08;二&#xff09; 注册组件 找到你需要使用组…

微信小程序-----宿主环境(组件介绍和代码编写)

目录 前言 宿主环境简介 1. 什么是宿主环境 ​编辑 2.小程序的宿主环境 3. 小程序宿主环境包含的内容 一、通信模型 1. 通信的主体 2. 小程序的通信模型 二、运行机制 1.小程序启动的过程 2.页面渲染的过程 三、组件 常用的视图容器类组件 1.view 组件 2.scroll-…

RK3399平台入门到精通系列讲解(驱动篇)eventpoll结构体详解

🚀返回总目录 文章目录 一、eventpoll 结构体二 、epitem 结构体三、eppoll_entry 结构体eventpoll 结构体:eventpoll 结构体是 epoll 在内核中的核心结构epitem 结构体:epitem 结构体用于表示 epoll 实例中的事件项eppoll_entry 结构体:它的作用就是关联Socket等待队列中…

MES数据采集在制造业的应用

MES设备数据采集的流程包括以下几个步骤&#xff1a; 1. 设备接入&#xff1a;将设备接入MES系统&#xff0c;建立设备与MES系统之间的连接。 2. 数据采集&#xff1a;通过传感器和采集器等设备&#xff0c;采集设备运行数据和状态信息。 3. 数据存储&#xff1a;将采集到的设…

【JaveWeb教程】(19) MySQL数据库开发之 MySQL数据库操作-DML 详细代码示例讲解

目录 3. 数据库操作-DML3.1 增加(insert)3.2 修改(update)3.3 删除(delete)3.4 总结 3. 数据库操作-DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09;修改数据…

中央处理器CPU(1)----指令周期和微程序

前言&#xff1a;由于期末复习计算机组成效率太慢所以抽时间写一下文章总结一下思路&#xff0c;理解不是很深&#xff0c;欢迎各位不吝赐教。 由于时间不是很充分&#xff0c;所以有些考点由于我们不考试&#xff0c;一笔带过了。 我这是期末复习总结&#xff0c;不是考研知识…

vue.js环境在window和linux安装

nodei官网&#xff1a;https://nodejs.org/en/download/ 一.windows环境下安装vue 1&#xff1a;node安装 在node.js的官网上下载node的安装包&#xff0c;下载下来之间安装即可&#xff0c;在命令行输入 npm -vnode -v 如下表示安装成功 2&#xff1a;cnpm安装 npm inst…

第十二章Session

第十二章Session 1.什么是Session2.Session的创建与获取3.session域中数据的存取4.Session超时的控制5.浏览器和session之间关联的技术内幕 1.什么是Session 注意&#xff1a;前面的Cookie是保存在客户端&#xff0c;而session是在服务端的 2.Session的创建与获取 这里Session…

让企业的招投标文件、生产工艺、流程配方、研发成果、公司计划、员工信息、客户信息等核心数据更安全。

PC端访问地址1&#xff1a;www.drhchina.com PC端访问地址2&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 全方位立体式防护  让数据泄密无处遁形 信息防泄漏是一项系统的整体部署工程&#xff0c;加密监控已成为多数企事业单…

微信小程序Burp抓包

方法有很多&#xff0c;工具也各有差异&#xff0c;主要是学代理流量的思路 Burp流量代理工具小程序 一、Burp证书导入 1、开启代理 开启浏览器的代理&#xff0c;火狐推荐FoxyProxy&#xff0c;Google推荐SwitchyOmega&#xff0c;设置代理为127.0.0.1:8080。 2、下载证书…