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

news2024/11/20 12:24:40

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)

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

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

相关文章

【排序】快速排序(C语言实现)

文章目录 前言1. Hoare思想2. 挖坑法3. 前后指针法4. 三路划分5. 快速排序的一些小优化5.1 三数取中常规的三数取中伪随机的三数取中 5.2 小区间优化 6. 非递归版本的快排7. 快速排序的特性总结 前言 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其…

设计模式之组合模式【结构型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

Python expandtabs()与endswith()方法

Python expandtabs()方法 描述 Python expandtabs() 方法把字符串中的 tab 符号(\t)转为空格,默认的空格数 tabsize 是 8。 语法 expandtabs()方法语法: string.expandtabs(tabsize8) 参数 tabsize -- 指定转换字符串中的 tab 符号(\t)转为空格的字…

边缘计算AI智能分析网关V4算力分析及应用场景

一、硬件介绍 智能分析网关V4是TSINGSEE青犀视频推出的一款高性能、低功耗的软硬一体AI边缘计算硬件设备,硬件采用BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz。硬件内置近40种AI算法模型,支持对接入的视频图像进行人、车、…

msvcr120.dll是什么?msvcr120.dll丢失要怎么去修复?

随着计算机技术的不断发展,我们在使用软件或游戏时经常会遇到各种错误提示,其中找不到msvcr120.dll就是一种常见的错误。那么,msvcr120.dll是什么?它的作用是什么?如何修复msvcr120.dll丢失的问题?本文将为…

20个很棒的SEO博客和网站

搜索引擎优化 (SEO) 标准在不断变化。与社交媒体、电子邮件营销和人工智能 (AI) 等新兴技术一样,搜索引擎正在改进它们每天向用户提供结果的方式。 为此,他们专注于本地化、页面权限、点击率,甚…

数据结构与算法之美学习笔记:46 | 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?

目录 前言算法解析总结引申 前言 本节课程思维导图: 上一节我们讲到,如何用位图、布隆过滤器,来过滤重复的数据。今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信? 垃圾短信和骚扰电话,我…

【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

在「读未提交」和「读已提交」隔离级别下,都只会使用记录锁;而对于「可重复读」隔离级别来说,会使用记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢&#xf…

美客多本土店与跨境店有何区别?本土店如何入驻运营?

美客多被誉为“拉美亚马逊”,作为拉美地区最大的跨境电商平台,吸引了不少跨境电商卖家入驻。但在入驻过程中也会遇到一个问题,本土店与跨境店分别是什么?有何区别?应该选择本土店还是跨境店入驻呢?下面为你…

使用YOLOv5训练自己的数据集 --- 老鼠识别

方式一:YOLOv5开源地址:https://github.com/ultralytics/yolov5/blob/master/README.zh-CN.md 方式二:YOLOv5源码:https://pan.baidu.com/s/12khk-Wkc5_J5ho4oZ7_FhA?pwdxtru 安装环境依赖包: 项目目录地址栏中输入…

MobaXterm游戏讲解

前言 没想到吧,这里还有游戏,以下是玩法 玩法 注 点击Type可以自由更改地图大小 1.Netwalk 这个游戏是用鼠标点击每一个格子,进行旋转方向,使得所有方块连接接来,全部变成亮蓝色 2.Mines 这个就是扫雷了&#xff…

算法训练营Day42(背包问题)

基础 非竞赛只需要搞懂0-1背包和完全背包 0-1背包基础 0-1背包是完全背包和多重背包的基础 n个物品,每个物品一个,每个物品有自己的重量和价值,,一个背包能装m物品,问最多装多少物品。 暴力解法,n个物品…

循环中的continue和break | python

1 continue continue关键字用于:中断本次循环,直接进入下一次循环 continue可以用于:for循环和while循环,效果一致 上侧代码: 在循环内,遇到continue就结束当次循环,进行下一次所以,语句2是不会执行的。 1.1 应用场…

网点分散难管理?组网是物流企业的正解!

物流企业服务网点分散、难以管理是企业面临的一个问题,而组网是解决这一问题的正解。通过建立统一的网络,物流企业可以实现更好的资源管理和信息流动,从而提高运营效率和服务水平,实现企业的可持续发展。 随着物流业务的不断拓展…

pycharm导入etree报Cannot find reference ‘etree‘ in ‘__init__.py‘ more... (Ctrl+F1)

问题 发现 from lxml import etree的时候,etree报错了。提示Cannot find reference etree in __init__.py more... (CtrlF1)。 解决办法 后面发现是pycharm自己的BUG,所以写了新的写法

黑马苍穹外卖学习Day2

文章目录 员工管理模块实现新增员工需求设计分析代码开发功能测试代码完善 员工分页查询需求分析与设计代码开发功能测试代码完善 启用禁用员工账号需求分析和设计代码开发功能测试 编辑员工需求分析代码开发 导入分类模块功能代码需求分析设计 员工管理模块实现 新增员工 需…

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

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

刚开始学习 c++ 要注意哪些方面?

刚开始学习 c 要注意哪些方面? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&…

API获取商品详情电商补单及价格监控调用api

很多电商系统,如返利系统、ERP、OMS软件等,需要通过商品API接口获取商品详情信息,来满足业务场景需要。具体包括:商品的标题、价格、SKU、主图、评价等维度信息 获取key和密钥 返回数据: {"item": {"…

MacOS安装Miniforge、Tensorflow、Jupyter Lab等(2024年最新)

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家&#xff0…