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()

 

posted @ 2019-01-10 17:14  zheng1076  阅读(4197)  评论(0编辑  收藏  举报