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运行的17个时新手常见错误小结
Aug 07 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
python处理数据,存进hive表的方法
Jul 04 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
python分割一个文本为多个文本的方法
Jul 22 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
Python3 filecmp模块测试比较文件原理解析
Mar 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
python怎么提高计算速度
2020/06/11 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
Python使用Pygame绘制时钟
2020/11/29 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
钳工实习自我鉴定
2013/09/19 职场文书
工作违纪检讨书
2014/02/17 职场文书
条幅标语大全
2014/06/20 职场文书
投标单位介绍信
2015/05/05 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书