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, request

app = 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用srs_librtmp实现RTMP推流

1、背景 由于项目有需求在一个现有的产品上增加RTMP推流的功能,目前只推视频流。 2、方案选择 由于是在现有的产品上新增功能,那么为了减少总的成本,故选择只动应用软件的来实现需求。 现有的产品中的第三方库比较有限,连个ffmp…

PPT模板,免费下载

找PPT模板、素材,就上这几个网站,免费下载。 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYxMjky 菜鸟图库素材非常齐全,设计、办公、图片、视频等素材这里都能找到,PPT模板数量很可观,模板样…

《AI基本原理和python实现》栏目介绍

一、说明 栏目《AI基本原理和python实现》的设计目的是为了实现相关算法的python编程。因为用python实现AI需对相关的python库进行全方位了解,本栏目基本包含了【机器学习】相关的经典算法,除此之外还包括了数据分析、时间序列等一些概念和相关python代码…

斯坦福Mobile ALOHA提到的ACT之外的另两项技术:Diffusion Policy、VINN

前言 本文接上一篇文章《斯坦福机器人Mobile ALOHA的关键技术:动作分块ACT的算法原理与代码剖析》而来,当然最开始本文是作为上一篇文章的第二、第三部分的 但因为ACT太过关键,除了在上一篇文章中写清楚其算法原理之外,还得再剖…

借助文档控件Aspose.Words,使用 Java 在 Word 文档中创建表格

Microsoft Word 是一种流行的文字处理应用程序,用于创建各种类型的文档。这些文档可能包含多种类型的元素,包括文本、图像、表格和图表。当涉及到用 Java 自动创建和操作文档时,您可能需要一个轻松的解决方案来在 Word 文档中创建表格。因此&…

操作系统课程设计:常用页面置换算法(OPT、FIFO、LRU)的实现及缺页率的计算(C语言)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、效果图二、代码(带注释)三、说明 一、效果图 二、代码(带…

@RequestParam

在我们写接口的时候,经常会用到这个注解来标记参数,通过这个注解我们可以把请求的url中的参数名和值映射到被标记的参数上。 比如下方,这个接口是通过传入的参数来查询相关信息的 我们定义这样一个接口,设置了8个参数,…

接口测试工具:Postman的高级用法

Postman 是一款功能强大的 API 开发和测试工具,以下是一些高级用法的详细介绍和操作步骤。【文末有配套视频教程和免费的资料文档领取】 一、环境和全局变量 环境变量允许你设置特定于环境(如开发、测试、生产)的变量,全局变量则…

C++ Primer 6.1 函数基础

函数的形参列表 int func(int v,int v2) {int v,v2;//!错误 } 函数返回类型 不能是数组和函数(两者都不接受对拷),但可以是指针 局部对象 形参和函数体内部的变量称为局部变量,仅在函数内部可见,隐藏外部…

四川天蝶电子商务有限公司助力商家飞向电商蓝海

随着互联网的飞速发展,电商行业已经成为一个不可忽视的经济增长点。在这个大背景下,四川天蝶电子商务有限公司凭借其独特的抖音电商服务,迅速崭露头角,成为了众多商家在电商领域的得力助手。今天,我们将深入了解这家公…

关于markdown文件插入图片变成相对路径

两种方式 第一种方式 ![](绝对路径)变成下面这种相对路径 也就是说每次插入的时候,都得修改一下。 第二种方式 在Typora中,文件——偏好设置——图像——优先选择相对路径 这样问题就解决了。 如果想了解更多的方式,附上链接。 Typora…

Groove闭包

Groovy闭包 - 简书# 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础知识 闭包就是一段可以使用参数的代码片段,每个闭包会被编译成...https://www.jianshu.com/p/c73b03cdf986

Android中两种选择联系人方式

1.在选择联系人方式网上也有很多案例 有的说是使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI也有的说是使用ContactsContract.Contacts.CONTENT_URI其实这两种方式都可以使用 只不过ContactsContract.Contacts.CONTENT_URI这种方式需要多查询一遍 一、使用Contacts…

矿山无人驾驶方案

矿山无人驾驶运输系统,可实现露天矿采煤装载运输的无人化,满足智能矿山安全、高效、绿色、环保等目标。 无人驾驶应用的总体技术架构包括“车端、场端、云端”三个层面以及相应的安全保障体系,其中车端的智能矿卡具备车辆感知、通信、决策和执…

[NOIP2006 提高组] 作业调度方案(修改)

题目: 这里对于之前的题目进行修改记录。果然还是受不了等待,利用晚饭时间又看了这个题目。于是发现了问题。 之前的博客:https://blog.csdn.net/KLSZM/article/details/135522867?spm1001.2014.3001.5501 问题修改描述 上午书写的代码中是…

Mongodb Replica Sets 副本集群搭建

Replica Sets 复制集搭建 MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。 Master-Slaver 是一种主从复制的模式,目前已经…

Spring MVC 的RequestMapping注解

RequestMapping注解 使用说明 作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以…

解决:TypeError: ‘dict_keys’ object does not support indexing

解决:TypeError: ‘dict_keys’ object does not support indexing 文章目录 解决:TypeError: dict_keys object does not support indexing背景报错问题报错翻译报错位置代码报错原因解决方法方法一:方法二:方法三:今…

CES2024:智能戒指、全息技术、AI家居机器人等有趣的小工具

在CES2024的展会上上,我们见证了一系列充满创意和未来感的科技产品。从智能戒指到全息技术,再到AI家居机器人,这些有趣的小工具不仅展现了技术的进步,更预示着未来生活的可能性。现在就来给大家介绍九个实用有趣的小工具。 1、华…

单因素方差分析--R

任务说明 三个剂量水平的药物处理受试者,每个剂量水平十个受试者,现在收集到数据后,问: 药物剂量水平显著影响受试者的response? 或者不同剂量药物处理受试者有显著效果的差异吗? 数据 library(tidyvers…