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实现把数字转换成中文
Jun 29 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
python django 原生sql 获取数据的例子
Aug 14 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
关于Keras Dense层整理
May 21 Python
Python自省及反射原理实例详解
Jul 06 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 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
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
详解jQuery事件
2017/01/13 Javascript
JS中的phototype详解
2017/02/04 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
js实现随机抽奖
2020/03/19 Javascript
python中实现数组和列表读取一列的方法
2018/04/03 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
在Python中COM口的调用方法
2019/07/03 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
Python extract及contains方法代码实例
2020/09/11 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
实习生自荐信范文
2013/11/13 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
高中生学习的自我评价
2013/12/14 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
社会实践活动报告
2015/02/05 职场文书
学校党支部承诺书
2015/04/30 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书