前言
首先圖片格式轉換的方法有很多,但是轉二進制字節流的,我搜了一下午終于在 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 iofrom PIL import Image # 注意我的Image版本是pip3 install Pillow==4.3.0import requestsres = 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
新聞熱點
疑難解答