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

 更新时间:2024年09月14日 11:25:06   作者:脸不大的CVer  
无论使用cv2、PIL还是直接读取图片的方法进行图片与Base64的转换,核心步骤都涉及到二进制格式的转换,每种方法的基本过程都是:Base64转二进制,然后二进制转图片,或反向操作,这些方法均基于二进制与图片转换的基本原理

通过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 <——> 二进制 <——> 图片

其中使用到了我的另一篇文章二进制和图片互相转换的三种方式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Windows下为Python安装Matplotlib模块

    Windows下为Python安装Matplotlib模块

    这篇文章主要介绍了如何在Windows下为Python安装Matplotlib模块的方法,非常的详细,而且附上了官方的下载地址,小伙伴们操作起来应该毫无压力了。
    2015-11-11
  • Python开发必知必会标识符UUID全面使用指南

    Python开发必知必会标识符UUID全面使用指南

    在Python编程中,UUID(通用唯一标识符)是一个非常有用的工具,用于生成唯一的标识符,本文将深入探讨Python中UUID的用法、不同版本的UUID、以及如何在实际应用中充分利用UUID的优势
    2023-12-12
  • Python语音合成之第三方库gTTs/pyttsx3/speech横评(内附使用方法)

    Python语音合成之第三方库gTTs/pyttsx3/speech横评(内附使用方法)

    Python是一种非常强大的脚本语言,可以用来实现各种复杂的应用,其中之一就是文本转语音,即把文字转换成声音来发出,下面这篇文章主要给大家介绍了关于Python语音合成之第三方库gTTs/pyttsx3/speech横评的相关资料,文中还介绍了详细的使用方法,需要的朋友可以参考下
    2023-05-05
  • 使用Python解决常见格式图像读取nii,dicom,mhd

    使用Python解决常见格式图像读取nii,dicom,mhd

    这篇文章主要介绍了使用Python解决常见格式图像读取nii,dicom,mhd,下文具体操作过程需要的小伙伴可以参考一下
    2022-04-04
  • keras如何指定运行时显卡及限制GPU用量

    keras如何指定运行时显卡及限制GPU用量

    这篇文章主要介绍了keras如何指定运行时显卡及限制GPU用量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Python实现银行账户资金交易管理系统

    Python实现银行账户资金交易管理系统

    这篇文章主要介绍了Python银行账户资金交易管理系统,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 对sklearn的使用之数据集的拆分与训练详解(python3.6)

    对sklearn的使用之数据集的拆分与训练详解(python3.6)

    今天小编就为大家分享一篇对sklearn的使用之数据集的拆分与训练详解(python3.6),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python tensorflow学习之识别单张图片的实现的示例

    python tensorflow学习之识别单张图片的实现的示例

    本篇文章主要介绍了python tensorflow学习之识别单张图片的实现的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python3.9又更新了:dict内置新功能

    Python3.9又更新了:dict内置新功能

    这篇文章主要介绍了Python3.9又更新了:dict内置新功能,从文档中,我们可以看到官方透露的对 dict、math 等组件增加的新特性,以及下一步的开发进展
    2020-02-02
  • 简单示例入门了解Python TkInter框架

    简单示例入门了解Python TkInter框架

    这篇文章主要为大家通过简单示的示例带大家入门了解Python TkInter框架,让大家对Python TkInter有一个简单的认知,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2023-11-11

最新评论