当前位置: 首页 > 工具软件 > b64img > 使用案例 >

base64图片的转码,解码和显示

唐景山
2023-12-01

base64图片的转码,解码和显示

之前遇到项目需要将图片使用base64编码后作为json的字段传输,现在整理相关读取、编码、解码、显示图片的代码。

读取图片、编码图片

import base64
# 读取文件形式读取图片
def get_base64_from_file(path):
    with open(path, 'rb') as file:
        return str(base64.b64encode(file.read()), encoding='utf-8')

# 编码图片
import base64

def gen_test_img_base64(self):
	return get_base64_from_file('core/image_data/1.png')    # 替换为需要的图片路径

base64编码图片解码

import cv2    # pip install opencv-python
# base64字符串解码为二进制流
def get_bytes_from_base64(img_base64):
    return base64.b64decode(img_base64.encode())

img = get_bytes_from_base64(img_base64)
img_array = np.frombuffer(img, np.uint8)
img_cv = cv2.imdecode(img_array, cv2.COLOR_RGBA2RGB)

得到GBR三通道的ndarray像素数组

ndarray图片编码为base64字符串

因为opencv-python处理的是BGR图片,需要调整通道顺序,不然编码后的图片会偏色。

# 多维np数组交换列的方式
img_cv = img_cv[:,:,[2,1,0]]
img_cv = Image.fromarray(np.uint8(img_cv))
output_buffer = io.BytesIO()
img_cv.save(output_buffer, format='JPEG
img_base64 = str(base64.b64encode(output_buffer.getvalue()), encoding='utf-8')

显示base64编码的图片

import io
import base64
img = Image.open(io.BytesIO(base64.b64decode(img_base64.encode())))
img.show()
img = get_bytes_from_base64(img_b64)
img_array = np.frombuffer(img, np.uint8)
img_cv = cv2.imdecode(img_array, cv2.COLOR_RGBA2BGR)
cv2.namedWindow('input_image', cv2.WINDOW_AUTOSIZE)
cv2.imshow('input_image', img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()
 类似资料: