python图片base64编码与前后端传输

记录下在前后端传输中图像的编解码(使用python作为后端时传输的方式)

查了很多博客,能用的极少,这里写一个可以随取随用的。


import numpy as np
import cv2
from PIL import Image
import base64
from io import BytesIO

# 从文件读取并转为base64编码
def img2str(img_path:str):
	img = cv2.imread(img_path)
    img_data = cv2.imencode('.jpg', img)[1].tobytes()  
    # 将图片编码成流数据,放到内存缓存中,然后转化成string格式
    base64_data = base64.b64encode(img_data)
    img_base64 = str(base64_data, encoding='utf-8')
    return img_base64

# 从 array 将图像编码(直接编码即可,去掉读取那一步)
def array2str(img_np:np.array):
	img_data = cv2.imencode('.jpg', img)[1].tobytes()  
    # 将图片编码成流数据,放到内存缓存中,然后转化成string格式
    base64_data = base64.b64encode(img_data)
    img_base64 = str(base64_data, encoding='utf-8')
    return img_base64

# 读取编码后的图像字符串并转回图像
def str2img(img_str: str):
	# base64 解码图像字符串
    img_bs64 = base64.b64decode(img_str)
    # 使用 pillow Image读取byte流
    #(这里我试过用np 和 cv2 都不好用,用cv2会丢失维度信息)
    pil_img = Image.open(BytesIO(img_bs64))
    # 转为array 格式
    img_rgb = np.asarray(pil_img)
    # 把bgr 转为 rgb
    img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2RGB)
    return img_bgr

对于1-2维的array 可以直接使用np
(适用灰度图)

此处参考:https://blog.csdn.net/wangjian1204/article/details/84445334

(ps 这篇博客的第一部分可能有点问题)

# 1 - 2 维数组可以直接从np编码(适合灰度图)
def arr2d2str(arr):
	# 只支持1维或者2维数组,numpy数组转化成字节流
	assert len(arr.shape)<=2,'only allowed 1d or 2d array'
	bytesio = BytesIO()
	np.savetxt(bytesio, arr) 
	content = bytesio.getvalue()
	b64_code = base64.b64encode(content)
	arr2d_str = str(b64_code,encoding='utf-8')
	return arr2d_str
     
# 从base64编码恢复numpy数组
def str2arr2d(arr2d_str):
	b64_decode = base64.b64decode(arr2d_str)
	arr = np.loadtxt(BytesIO(b64_decode))
	print(arr)
	return arr
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值