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的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
python 阶乘累加和的实例
Feb 01 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
python实现统计代码行数的小工具
Sep 19 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
wxPython实现带颜色的进度条
Nov 19 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
python 常见的反爬虫策略
Sep 27 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 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
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
Python中实现三目运算的方法
2015/06/21 Python
python编码最佳实践之总结
2016/02/14 Python
Python实现的计算器功能示例
2018/04/26 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
详解python的super()的作用和原理
2020/10/29 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
劳动竞赛活动总结
2014/05/05 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
地陪导游欢迎词
2015/01/26 职场文书
玄武湖导游词
2015/02/05 职场文书
档案工作个人总结
2015/03/03 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS