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 25 Python
详解Django缓存处理中Vary头部的使用
Jul 24 Python
如何高效使用Python字典的方法详解
Aug 31 Python
Python中对象的引用与复制代码示例
Dec 04 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
python实现简单http服务器功能
Sep 17 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Python变量类型知识点总结
Feb 18 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
Pandas的Apply函数具体使用
Jul 21 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
PHP 模拟$_PUT实现代码
2010/03/15 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
javascript第一课
2007/02/27 Javascript
javascript 自动转到命名锚记
2009/01/10 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
win与linux系统中python requests 安装
2016/12/04 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
详解Python发送email的三种方式
2018/10/18 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
python实现图片上添加图片
2019/11/26 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
优秀生推荐信范文
2013/11/28 职场文书
人事助理自荐信
2014/02/02 职场文书
12岁生日演讲稿
2014/05/14 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书