Python3在线转换Webp图片格式并上传七牛云

洛溪
洛溪
发布时间:2026-10-13| 5人浏览过
原创

本文介绍如何使用Python3将远程Webp图片在线转换为PNG格式并直接上传至七牛云。通过requests获取图片二进制流,利用Pillow库的Image模块处理字节流,避免本地下载,实现高效格式转换与存储。

前言

图片格式转换的方法众多,但涉及转换为二进制字节流的方案,我经过一下午的搜索,最终在 Stack Overflow 上找到了相关解答。说明一下进行在线格式转换的原因:作为一名使用 Python3 的爬虫开发者,我的需求是抓取文章中的图片,并将其上传至公司的七牛云存储。这意味着图片无需下载到本地,只需在获取图片 URL 后,读取其二进制数据,上传至公司七牛云,同时完成格式替换(这一点颇为棘手)。

将图片的二进制数据上传至七牛云本身并不困难,参考七牛云的 API 文档即可实现。然而,七牛云官方文档中的 Python API 存在一定缺陷,其示例代码主要展示使用 put_file() 方法上传本地图片,而并未提供直接上传远程服务器图片的方法。

原本打算修改 qiniu SDK 的源码,但在查阅过程中发现了一个 put_data() 方法,该方法支持传入二进制数据。

接下来是本文的重点内容。

具体需求如下:由于我爬取的图片远程链接为 Google 的 .webp 格式,例如 https://xxxx.webp,而该格式不能简单地通过修改文件后缀名来转换。

因此,我在网络上搜索 Python3 实现图片格式转换的方法。

网上最常见的方法如下。

from PIL import Image  # 安装pillow 有些小坑 对了我的版本是Pillow==4.3.0
 im = Image.open("./demo1.jpg")
 im.save("./demo2.png")

然而,我需要上传的文件均不在本地,而是通过请求获取图片的二进制流,进而在线修改图片后缀。

直接展示代码。经过一下午的查找,甚至还在 Pillow 的 GitHub 上提问,最终在 Stack Overflow 上找到了解决方案。

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

res = requests.get('http://images.xxx.com/-7c0dc4dbdca3.webp')

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

roiImg = Image.open(byte_stream)  # Image打开二进制流Byte字节流数据

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)

我认为这篇在线转换的文章可能是 CSDN 上的第一篇,经过一下午的搜索,过程令人绝望。还是 Stack Overflow 更为实用,以下是我找到答案的链接。

今天登录 GitHub 时,发现之前提问的作者回复了我,链接为:https://github.com/python-pillow/Pillow/issues/3192

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。