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实现马耳可夫链算法实例分析
May 20 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
浅谈Python中函数的参数传递
Jun 21 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
便捷提取python导入包的属性方法
Oct 15 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
关于python3中setup.py小概念解析
Aug 22 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
一文搞懂python异常处理、模块与包
Jun 26 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP 验证登陆类分享
2015/03/13 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
js实现全选和全不选
2020/07/28 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python实现2048小游戏
2015/03/30 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
简短的公司员工自我评价分享
2013/11/13 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
本溪关门山导游词
2015/02/09 职场文书
预备党员个人总结
2015/02/14 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python