Python3实现转换Image图片格式


Posted in Python onJune 21, 2018

前言

首先图片格式转换的方法有很多,但是转二进制字节流的,我搜了一下午终于在 stackoverflow上搜到了
说一下为什么要在线转这个图片格式
额,一名Python3 spider, 需求要爬去文章,并且把里面的图片,上传到本公司的七牛云上面,
意思就是,图片不需要下载到本地,爬取到图片url后,读取图片二进制数据,然后上传到自己公司七牛云上面,并且替换其格式(这一点很坑)

上传图片二进制数据到七牛云上面不难, 照着七牛云API文档基本就能行,有一点很坑,七牛云官方文档Python API 贼鸡儿坑,上面的Demo全是,上传本地图片的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上提问。终于在stackoverflow上搜到了。

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第一篇, 搜了一下午,人都搜绝望了。
还是 stackoverflow 好用, 这个链接就是我搜到答案。

今天一上github ,作者回复我了的问题了,https://github.com/python-pillow/Pillow/issues/3192

Python 相关文章推荐
用Python代码来解图片迷宫的方法整理
Apr 02 Python
Python AES加密模块用法分析
May 22 Python
分析python切片原理和方法
Dec 19 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
python实现音乐下载器
Apr 15 Python
Python异常的检测和处理方法
Oct 26 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python装饰器原理与基本用法分析
Jan 07 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
Python利用folium实现地图可视化
May 23 Python
python编程项目中线上问题排查与解决
Nov 01 Python
python3实现域名查询和whois查询功能
Jun 21 #Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 #Python
详解Python下ftp上传文件linux服务器
Jun 21 #Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
python实现内存监控系统
Mar 07 #Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 #Python
You might like
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
Django 外键的使用方法详解
2019/07/19 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python阶乘求和的代码详解
2020/02/14 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
法学专业个人求职信
2013/09/26 职场文书
中专毕业生自荐信范文
2013/11/28 职场文书
自荐书4要点
2014/01/25 职场文书
初中生自我鉴定
2014/02/04 职场文书
外国人聘用意向书
2014/04/01 职场文书
财务整改报告范文
2014/11/05 职场文书
检讨书范文大全
2015/05/07 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL