Python 如何在PIL中打开URL中的图像
PIL(Python Imaging Library)是一种广泛使用的Python库,使开发人员可以处理图像文件。它提供了一系列操作和处理图像文件的功能,例如打开和调整图像大小、在不同格式之间转换等等。
在处理图像时,经常遇到的任务之一是从URL中打开图像文件。这在处理存储在远程服务器上的图像时特别有用,例如从在线数据库或网站获取的图像。
在本文中,我们将学习如何在PIL中从URL打开图像。我们将看到使用以下方法从URL中打开图像的不同方法−
- 使用urllib模块
-
使用requests模块
-
使用io模块
-
使用Pillow模块
不同的方法
下面是一些在PIL中打开URL中的图像时常用的方法−
方法1:使用urllib模块
用于在PIL中从URL打开图像的第一种方法是使用urllib模块下载图像。
示例
下面的示例演示了如何在PIL中使用urllib模块从URL中打开图像。
在给定的示例中,我们首先从PIL中导入urllib.request模块和Image类。然后我们指定要打开的图像的URL。
我们使用urllib.request模块的urlretrieve()函数从URL中下载图像,并将其保存到本地文件系统中,文件名为“image.jpg”。此函数接受两个参数:图像的URL和要保存为的文件名。
然后我们使用Image.open()函数在PIL中打开保存的图像,并使用show()方法显示图像。
#imports
import urllib.request
from PIL import Image
my_url = "https://www.tutorialspoint.com/images/logo.png"
# Download the image using urllib
urllib.request.urlretrieve(my_url, "logo.png")
# Open the downloaded image in PIL
my_img = Image.open("logo.png")
# Show the image
my_img.show()
输出
方法2:使用Requests模块
第二种方法用于在PIL中打开URL中的图像是使用requests模块下载图像。
示例
以下示例演示了如何使用requests模块在PIL中从URL打开图像。
在此示例中,我们首先从PIL导入requests模块和Image类。然后,我们指定要打开的图像的URL。
我们使用requests.get()函数向URL发送HTTP GET请求并检索响应。此函数返回一个包含响应的内容的Response对象。
然后,我们使用io模块的BytesIO()函数创建一个新的内存二进制流,并将响应的内容传递给它。然后,我们使用Image.open()函数将二进制流作为图像在PIL中打开,并使用show()方法显示图像。
#imports
import requests
from PIL import Image
my_url = "https://www.tutorialspoint.com/images/logo.png"
# Download the image using requests
my_res = requests.get(my_url)
# Open the downloaded image in PIL
my_img = Image.open(BytesIO(my_res.content))
# Show the image
my_img.show()
输出
方法3:使用io模块
第三种在PIL中使用io模块打开URL中的图片的方法是直接从URL中读取图片。以下是使用io模块的语法。
示例
下面的示例演示了如何使用io模块在PIL中打开URL中的图片。
在此示例中,我们使用urllib.request.urlopen()函数从URL中检索响应,该函数发送HTTP GET请求。成功执行此函数后,我们接收到一个类似文件的对象,其中包含响应的内容,我们可以在方便的时候读取它。
使用with语句,我们确保在读取内容后关闭文件类似对象。下一步,我们使用read()方法提取响应的内容并将其存储在名为img_data的变量中。
使用Image.open()函数,在使用BytesIO()函数创建一个新的内存二进制流并将img_data变量传递给它后,显示图片。这个过程将二进制流作为一张图片在PIL中打开。
#imports
import urllib.request
from PIL import Image
from io import BytesIO
my_url = "https://www.tutorialspoint.com/images/logo.png"
# Read the image from the URL using the io module
with urllib.request.urlopen(my_url) as my_url_res:
my_img_data = my_url_res.read()
# Open the image in PIL
my_img = Image.open(BytesIO(my_img_data))
# Show the image
my_img.show()
输出
方法4:使用Pillow模块
从URL中使用Pillow模块直接打开图像是第四种也是最后一种方法。
示例
以下示例演示了如何使用Pillow模块在PIL中从URL打开图像。
在这个示例中,为了获取一个响应,我们用到了requests.get()函数,它发送一个HTTP GET请求到URL。为了防止立即将响应储存在内存中,我们将stream参数设置为True。
使用requests.get()返回的Response对象,我们提取我们需要的原始内容。一旦我们得到这个内容,我们就可以使用Image.open()来访问PIL格式的图像。然后,我们可以使用show()方法来查看图像。
#imports
from PIL import Image
import requests
my_url = "https://www.tutorialspoint.com/images/logo.png"
# Open the image directly from the URL using Pillow
my_img = Image.open(requests.get(my_url, stream=True).raw)
# Show the image
my_img.show()