当前位置: 代码网 > it编程>前端脚本>Python > python关于图片和base64互转的三种方式

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

2024年09月14日 Python 我要评论
通过cv2进行转换import cv2import base64import numpy as npdef img_to_base64(img_array): # 传入图片为rgb格式numpy

通过cv2进行转换

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

方法调用:

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进行转换

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

方法调用:

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)

结果显示:

直接读取图片方式

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

方法调用:

base64_img = path2base64("1.jpg")
img_from_base64 = base64_to_img(base64_img)

总结

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

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

其中使用到了我的另一篇文章

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • Pandas数据清洗与过滤空值技巧

    Pandas数据清洗与过滤空值技巧

    pandas进行数据清洗,过滤空值在pandas中,进行数据清洗和过滤空值等操作是非常常见的任务。以下是一些简洁且通俗易懂的步骤,用于说明如何利用pandas进... [阅读全文]
  • Pandas数据清洗的维度详解

    Pandas数据清洗的维度详解

    数据清洗的重要性数据清洗是数据分析的基础,它直接影响到后续分析的准确性和可靠性。通过数据清洗,我们可以:提高数据质量,减少错误分析和错误决策。增加数据可用性,使... [阅读全文]
  • Python如何用字典完成匹配任务

    1. 问题描述如下左图为编号与gene名称的对应关系(此处仅显示前10条),已存为字典(map_gene)右图为我们需要去匹配的gene名称,如何根据基因名称给出对应的编号?2. …

    2024年09月13日 前端脚本
  • Python如何新建三维数组并赋值

    python新建三维数组并赋值本文主要分为2部分:<1>如何建立三维矩阵;<2>如何将二维数组赋值到三维数组,且包含对每个参数的理解。多维矩阵的建立和赋值与…

    2024年09月13日 前端脚本
  • 关于np.meshgrid函数中的indexing参数问题

    关于np.meshgrid函数中的indexing参数问题

    meshgrid函数在二维空间中可以简单地理解为将x轴与y轴的每个位置的坐标关联起来形成了一个网格,我们知道空间中的点是由坐标确定的,因此,当x与y关联起来后,... [阅读全文]
  • 使用Python设置PDF中图片的透明度的实现方法

    使用Python设置PDF中图片的透明度的实现方法

    引言在pdf文档的设计与内容创作过程中,图像的透明度设置是一个重要的操作。尤其是在处理图文密集型pdf文档时,设置适当的图片透明度能够极大地提升视觉表达的层次感... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com