使用请求库临时检索图像
temporarily retrieve an image using the requests library
我正在编写一个网络抓取工具,只需要从 url 中抓取图像的缩略图。
这是我使用 urlib 库的函数。
def create_thumb(self):
if self.url and not self.thumbnail:
image = urllib.request.urlretrieve(self.url)
# Create the thumbnail of dimension size
size = 350, 350
t_img = Imagelib.open(image[0])
t_img.thumbnail(size)
# Get the directory name where the temp image was stored
# by urlretrieve
dir_name = os.path.dirname(image[0])
# Get the image name from the url
img_name = os.path.basename(self.url)
# Save the thumbnail in the same temp directory
# where urlretrieve got the full-sized image,
# using the same file extention in os.path.basename()
file_path = os.path.join(dir_name, "thumb" + img_name)
t_img.save(file_path)
# Save the thumbnail in the media directory, prepend thumb
self.thumbnail.save(
os.path.basename(self.url),
File(open(file_path, 'rb')))
出于各种原因,我需要更改它以使用请求库,临时保存图像的等效项是什么?
您可以写入 io.BytesIO:
import requests
from PIL import Image
from io import BytesIO
r = requests.get(self.url)
b = BytesIO(r.content)
size = 350, 350
img = Image.open(b)
img.thumbnail(size)
img.save("foo.thumbnail", "JPEG")
您可以跳过保存到临时文件部分,直接使用相应的响应对象创建图像:
#!/usr/bin/env python3
import urllib.request
from PIL import Image # $ pip install pillow
im = Image.open(urllib.request.urlopen(url))
print(im.format, im.mode, im.size)
这里是 requests
模拟:
#!/usr/bin/env python
import requests # $ pip install requests
from PIL import Image # $ pip install pillow
r = requests.get(url, stream=True)
r.raw.decode_content = True # handle spurious Content-Encoding
im = Image.open(r.raw)
print(im.format, im.mode, im.size)
我已经使用 Pillow
2.9.0 和 requests
2.7.0 对其进行了测试。从 Pillow
2.8.
开始它应该可以工作
我正在编写一个网络抓取工具,只需要从 url 中抓取图像的缩略图。
这是我使用 urlib 库的函数。
def create_thumb(self):
if self.url and not self.thumbnail:
image = urllib.request.urlretrieve(self.url)
# Create the thumbnail of dimension size
size = 350, 350
t_img = Imagelib.open(image[0])
t_img.thumbnail(size)
# Get the directory name where the temp image was stored
# by urlretrieve
dir_name = os.path.dirname(image[0])
# Get the image name from the url
img_name = os.path.basename(self.url)
# Save the thumbnail in the same temp directory
# where urlretrieve got the full-sized image,
# using the same file extention in os.path.basename()
file_path = os.path.join(dir_name, "thumb" + img_name)
t_img.save(file_path)
# Save the thumbnail in the media directory, prepend thumb
self.thumbnail.save(
os.path.basename(self.url),
File(open(file_path, 'rb')))
出于各种原因,我需要更改它以使用请求库,临时保存图像的等效项是什么?
您可以写入 io.BytesIO:
import requests
from PIL import Image
from io import BytesIO
r = requests.get(self.url)
b = BytesIO(r.content)
size = 350, 350
img = Image.open(b)
img.thumbnail(size)
img.save("foo.thumbnail", "JPEG")
您可以跳过保存到临时文件部分,直接使用相应的响应对象创建图像:
#!/usr/bin/env python3
import urllib.request
from PIL import Image # $ pip install pillow
im = Image.open(urllib.request.urlopen(url))
print(im.format, im.mode, im.size)
这里是 requests
模拟:
#!/usr/bin/env python
import requests # $ pip install requests
from PIL import Image # $ pip install pillow
r = requests.get(url, stream=True)
r.raw.decode_content = True # handle spurious Content-Encoding
im = Image.open(r.raw)
print(im.format, im.mode, im.size)
我已经使用 Pillow
2.9.0 和 requests
2.7.0 对其进行了测试。从 Pillow
2.8.