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中__str__和__repr__方法的区别
Apr 17 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
python+splinter自动刷新抢票功能
Sep 25 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
详解Django配置优化方法
Nov 18 Python
python装饰器的特性原理详解
Dec 25 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
使用Python获取字典键对应值的方法
Apr 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
Django数据库表反向生成实例解析
2018/02/06 Python
Python应用库大全总结
2018/05/30 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python实现爬山算法的思路详解
2019/04/09 Python
python manage.py runserver流程解析
2019/11/08 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
快递业务员岗位职责
2014/01/06 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python