問題描述
有圖片地址,可以在網頁打開 URL:https://bdfile.bluemoon.com.cn/group2/M00/0A/BA/wKg_HlwzY1SAIdXDAAFyo-ZOLKQ399.jpg
現需要將圖片url轉為圖片,保存在本地
解決思路
在內存中將圖片url打開,編碼為base64,在對這個編碼進行解碼為圖片進行保存即可
import os,base64 import requests as req from PIL import Image from io import BytesIO response = req.get("https://bdfile.bluemoon.com.cn/group2/M00/0A/BA/wKg_HlwzY1SAIdXDAAFyo-ZOLKQ399.jpg") # 內存中打開圖片 image = Image.open(BytesIO(response.content)) # 圖片的base64編碼 ls_f = base64.b64encode(BytesIO(response.content).read()) # base64編碼解碼 imgdata = base64.b64decode(ls_f) # 圖片文件保存 file = open('test.jpg','wb') file.write(imgdata) file.close()
結果
補充:
原文:https://www.jianshu.com/p/d64354a61359
1.用OpenCV
OpenCV的imread()只能加載本地的圖片,並不能通過網址加載圖片。但是,opencv的VideoCapture類可以從url加載視頻。如果只用opencv的話,我們可以一個迂回的方式:先用VideoCapure加載網址下的圖片,然后再傳給Mat。
import cv2 cap = cv2.VideoCapture(img_src) if( cap.isOpened() ) : ret,img = cap.read() cv2.imshow("image",img) cv2.waitKey()
2. OpenCV+Numpy+urllib
import numpy as np import urllib import cv2 resp = urllib.urlopen(img_src) image = np.asarray(bytearray(resp.read()), dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR) cv2.imshow("Image", image) cv2.waitKey(0)
3. skimage
相對來說,這種方式應該是最簡單的,因為skimage可以直接以imread()函數來讀取網頁圖片,而不需要其他的輔助,也不需要迂回。
from skimage import io image = io.imread(img_src) io.imshow(image) io.show()