python-URL转jpg图片
问题描述
有图片地址,可以在网页打开 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()