【Python】PIL实现将网络图片读取并转换成base64编码和MD5

由于企业微信发送图片需要base64编码值和MD5值,这就需要我们将照片存在本地并用base64和hashlib两个包读取并转换

import base64
import hashlib

with open(imgPath, 'rb') as file:  # 转换图片成base64格式
    data = file.read()
    encodestr = base64.b64encode(data)
    image_data = str(encodestr, 'utf-8')

with open(imgPath, 'rb') as file:  # 图片的MD5值
    md = hashlib.md5()
    md.update(file.read())
    image_md5 = md.hexdigest()

但是因为工作中需要使用到轻流作为前端,用户上传头像和输入一下信息,生成一张工牌,轻流不具备这个功能,因此打算借助HiFlow代码块功能,获取到的轻流数据是一个网络地址:https://file.qingflow.com/documents/form/attach/*****.jpg

这里需要借助requests包来获取response.content的方式读取到网络文件,PIL包来处理文件为二进制流

import base64
from io import BytesIO
import requests
import hashlib

# pip3 install pillow
from PIL import Image


# 若img.save()报错 cannot write mode RGBA as JPEG
# 则img = Image.open(image_path).convert('RGB')
def image_to_base64(img, fmt='png'):
    output_buffer = BytesIO()
    img.save(output_buffer, format=fmt)
    byte_data = output_buffer.getvalue()
    base64_str = base64.b64encode(byte_data).decode('utf-8')
    # return f'data:image/{fmt};base64,' + base64_str
    return base64_str


def image_to_md5(img, fmt='png'):
    output_buffer = BytesIO()
    img.save(output_buffer, format=fmt)
    byte_data = output_buffer.getvalue()
    md = hashlib.md5()
    md.update(byte_data)
    return md.hexdigest()


img_src = filepath = bundle['inputData']['filepath']
response = requests.get(img_src)
with Image.open(BytesIO(response.content)) as _img:
    image_data = image_to_base64(_img)

with Image.open(BytesIO(response.content)) as _img:
    image_md5 = image_to_md5(_img)


output={'image_data':image_data,'image_md5':image_md5}

至此,我们已经能够把一张网络位置的图片转换成base64编码了,就可以将此作为参数去请求工牌图片了,在将工牌发送到企业微信群的时候,发现MD5不匹配,因此我想尝试用自己的方法将返回的工牌图片base64编码转为二进制流,再转一次MD5,代码如下:

import base64
import hashlib


def base64_to_md5(base64_data):
    img_data = base64.b64decode(base64_data)
    md = hashlib.md5()
    md.update(img_data)
    return md.hexdigest()


base64_param = bundle['inputData']['base64_param']
md5_data = base64_to_md5(base64_param)


output = {'base64_param': base64_param, 'md5_data': md5_data}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值