Python3的PIL.Image.Image图片webp格式转换,URL Image Byte字节流操作,转换成byte格式

Django admin 2年前 (2019-06-19) 1111次浏览 0个评论 扫描二维码

最近使用Django注册时,想使用python生成二维码图片上传到阿里云,于是在都端使用qrcode生成了图片,但是在上传到阿里云时提示错误。

之前也观察过上传到阿里云的要求,要求文件数据时byte格式的b''

于是想办法将qrcode的PIL.Image.Image格式的图片转换一下,怎么转换呢,最终在CSDN找到一篇相关的文章
文章地址:https://blog.csdn.net/wgPython/article/details/80740067
这个作者是将前端上传的数据在后段处理后上传到七牛云,作者的代码

from io import BytesIO
from PIL import Image  # 注意我的Image版本是pip3 install Pillow==4.3.0
import requests

res = requests.get('http://p1.pstatp.com/list/300x196/pgc-image/152923179745640a81b1fdc.webp', stream=True)  # 获取字节流最好加stream这个参数,原因见requests官方文档

byte_stream = BytesIO(res.content)  # 把请求到的数据转换为Bytes字节流(这样解释不知道对不对,可以参照[廖雪峰](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431918785710e86a1a120ce04925bae155012c7fc71e000)的教程看一下)

roiImg = Image.open(byte_stream)   # Image打开Byte字节流数据
# roiImg.show()   #  弹出 显示图片
imgByteArr = io.BytesIO()     # 创建一个空的Bytes对象

roiImg.save(imgByteArr, format='PNG') # PNG就是图片格式,我试过换成JPG/jpg都不行

imgByteArr = imgByteArr.getvalue()   # 这个就是保存的图片字节流

# 下面这一步只是本地测试, 可以直接把imgByteArr,当成参数上传到七牛云
with open("./abc.png", "wb") as f:
    f.write(imgByteArr)

我的代码,由于我是qrcode生成的图片,有些不太一样,但是解决思路是一样的:

import io
import qrcode

qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )
        qr.add_data('{0}/reffer?id={1}'.format(CURRENT_URL,id))
        qr.make(fit=True)

        img = qr.make_image(fill_color="black", back_color="white")
        print(img)  # 类型PIL.Image.Image
        imgByteArr = io.BytesIO()  
        img.save(imgByteArr, format='PNG')  # PNG就是图片格式,我试过换成JPG/jpg都不行
        imgByte = imgByteArr.getvalue() #这里转换后就是b''格式的数据

codeobj , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python3的PIL.Image.Image图片webp格式转换,URL Image Byte字节流操作,转换成byte格式
喜欢 (4)
[a37free@163.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址