网络编程
位置:首页>> 网络编程>> Python编程>> Python3实现转换Image图片格式

Python3实现转换Image图片格式

作者:wgPython  发布时间:2021-06-06 21:04:25 

标签:Python3,Image

前言

首先图片格式转换的方法有很多,但是转二进制字节流的,我搜了一下午终于在 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

来源:https://blog.csdn.net/wgPython/article/details/80740067

0
投稿

猜你喜欢

  • 前言当我们需要安装python的第三方库时,通常都是打开cmd输入pip install xxx去安装。但是默认安装路径在C盘,极大占用空间
  • 前言WHL文件是以Wheel格式保存的Python安装包,Wheel是Python发行版的标准内置包格式。在本质上是一个压缩包,WHL文件中
  • 我们去一个受欢迎的地方买东西,难免会需要排队等待。如果有多个窗口的话,就会有不同队列的产生,当然每个队伍的人数也会出现参差不齐的现象。我们今
  • 尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖。Pytho
  • 前言前段时间在微博看到一段摸鱼人的倒计时模板,感觉还挺有趣的。于是我用了一小时的时间写了个页面出来 摸鱼办地址 (当然是摸鱼的时间啦)。模板
  • 这不仅仅是一个信息 * 的时代,也是一个服务 * 的时代。一切都是因为互联网,随着互联网技术的发展,信息的增多,服务的增多,用户需求的多样化。怎
  • 设置字段可选在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例
  • 各种asp字符串处理函数,包括:把字符串换为char型数组,把一个数组转换成一个字符串,检查源字符串str是否以chars开头,检查源字符串
  • 一、破解原理其实原理很简单,一句话概括就是「大力出奇迹」,Python 有两个压缩文件库:zipfile 和 rarfile,这两个库提供的
  • 本文实例为大家分享了python使用matplotlib绘制雷达图的具体代码,供大家参考,具体内容如下示例代码:# encoding: ut
  • 最近学习了一点python,那就试着做一做简单的编程练习。 首先是这个编程的指导图,如下:对的,类似一个简单区块链的模拟。 代码如下:cla
  • 1.函数参数# 1.位置参数:调用函数时,传入的值需要按照位置顺序传入# 实例:求x的n次方def xPowN(x,n):   &
  • predict_proba 返回的是一个 n 行 k 列的数组,列是标签(有排序), 第 i 行 第 j 列上的数值是模型预测 第 i 个预
  • 1:文件内容格式为json的数据如何解析import json,os,syscurrent_dir=os.path.abspath(&quo
  • 问题描述现有一个有向赋权图。如下图所示:问题:根据每条边的权值,求出从起点s到其他每个顶点的最短路径和最短路径的长度。说明:不考虑权值为负的
  • 一、Matplotlib 绘图在数据分析中,数据可视化也非常重要,通过直观的展示过程、结果数据,可以帮助我们清晰的理解数据,进而更好的进行分
  • 本文为大家分享了mysql 5.6.23 安装配置教程,供大家参考,具体内容如下1 下载mysql2 安装mysql3 配置环境变量 &nb
  • channel首先明确一下channel的作用:用于go协程间的通信。go语言最大的特点就是支持高并发:goroutine和channel是
  • 1,为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用
  • 本文实例为大家分享了js调用设备摄像头的具体代码,供大家参考,具体内容如下使用getUserMedia这个API来获取摄像头的权限 兼容ch
手机版 网络编程 asp之家 www.aspxhome.com