python
主页 > 脚本 > python >

python关于图片和base64互转的三种方式

2024-09-14 | 佚名 | 点击:

通过cv2进行转换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import cv2

import base64

import numpy as np

 

def img_to_base64(img_array):

    # 传入图片为RGB格式numpy矩阵,传出的base64也是通过RGB的编码

    img_array = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR) #RGB2BGR,用于cv2编码

    encode_image = cv2.imencode(".jpg", img_array)[1] #用cv2压缩/编码,转为一维数组

    byte_data = encode_image.tobytes() #转换为二进制

    base64_str = base64.b64encode(byte_data).decode("ascii") #转换为base64

    return base64_str

     

def base64_to_img(base64_str):

    # 传入为RGB格式下的base64,传出为RGB格式的numpy矩阵

    byte_data = base64.b64decode(base64_str)#将base64转换为二进制

    encode_image = np.asarray(bytearray(byte_data), dtype="uint8")# 二进制转换为一维数组

    img_array = cv2.imdecode(encode_image, cv2.IMREAD_COLOR)# 用cv2解码为三通道矩阵

    img_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2RGB)# BGR2RGB

    return img_array

方法调用:

1

2

3

4

img = np.zeros((100,100,3), dtype=np.uint8)

img[:,:,2]=255

base64_img = img_to_base64(img)

img_from_base64 = base64_to_img(base64_img)

结果显示:

通过PIL进行转换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from io import BytesIO

from PIL import Image

import base64

 

def image_to_base64(image):

    # 输入为PIL读取的图片,输出为base64格式

    byte_data = BytesIO()# 创建一个字节流管道

    image.save(byte_data, format="JPEG")# 将图片数据存入字节流管道

    byte_data = byte_data.getvalue()# 从字节流管道中获取二进制

    base64_str = base64.b64encode(byte_data).decode("ascii")# 二进制转base64

    return base64_str

 

def base64_to_image(base64_str):

    # 输入为base64格式字符串,输出为PIL格式图片

    byte_data = base64.b64decode(base64_str) # base64转二进制

    image = Image.open(BytesIO(byte_data)) # 将二进制转为PIL格式图片

    return image

方法调用:

1

2

3

4

5

img = np.zeros((100,100,3),dtype=np.uint8)

img[:,:,2]=255

image = Image.fromarray(img)

base64_str = image_to_base64(image)

image_from_base64=base64_to_image(base64_str)

结果显示:

直接读取图片方式

1

2

3

4

5

6

7

import base64

 

def path2base64(path):

    with open(path,"rb") as f:

        byte_data = f.read()

    base64_str = base64.b64encode(byte_data).decode("ascii")# 二进制转base64

    return base64_str

方法调用:

1

2

base64_img = path2base64("1.jpg")

img_from_base64 = base64_to_img(base64_img)

总结

无论使用哪种方式进行图片和base64的互相转换,都需要中间变量——二进制格式。

基本过程都为:base64 <——> 二进制 <——> 图片

原文链接:
相关文章
最新更新