如何在 PIL 中打开 URL 中的图像?
PIL (Python Imaging Library) 是一个广泛使用的 Python 库,使开发人员能够处理图像文件。它提供了广泛的功能来操作和处理图像文件,例如打开和调整图像大小、在不同格式之间转换等等。
处理图像时,一个经常遇到的任务是从 URL 打开图像文件。当处理存储在远程服务器上的图像(例如从在线数据库或网站获取的图像)时,这尤其有用。
在本文中,我们将学习如何在 PIL 中从 URL 打开图像。我们将看到在 PIL 中从 URL 打开图像的不同方法,包括以下方法:
使用 urllib 模块
使用 requests 模块
使用 io 模块
使用 Pillow 模块
不同的方法
以下是 PIL 中从 URL 打开图像的一些常用方法:
方法 1:使用 Urllib 模块
在 PIL 中从 URL 打开图像的第一种方法是使用 urllib 模块下载图像。
示例
下面的示例演示了如何在 PIL 中使用 urllib 模块从 URL 打开图像。
在给定的示例中,我们首先导入 urllib.request 模块和 PIL 中的 Image 类。然后,我们指定要打开的图像的 URL。
我们使用 urllib.request 模块的 urlretrieve() 函数从 URL 下载图像并将其保存到本地文件系统,文件名命名为“image.jpg”。此函数接受两个参数:图像的 URL 和保存图像的文件名。
然后,我们使用 Image.open() 函数在 PIL 中打开保存的图像,并使用 show() 方法显示图像。
#imports import urllib.request from PIL import Image my_url = "https://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 模块下载图像。
示例
下面的示例演示了如何在 PIL 中使用 requests 模块从 URL 打开图像。
在这个示例中,我们首先导入 requests 模块和 PIL 中的 Image 类。然后,我们指定要打开的图像的 URL。
我们使用 requests.get() 函数向 URL 发送 HTTP GET 请求并检索响应。此函数返回一个包含响应内容的 Response 对象。
然后,我们使用 io 模块中的 BytesIO() 函数创建一个新的内存二进制流,并将响应的内容传递给它。然后,我们使用 Image.open() 函数在 PIL 中将二进制流打开为图像,并使用 show() 方法显示图像。
#imports import requests from PIL import Image my_url = "https://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 中从 URL 打开图像的第三种方法是使用 io 模块直接从 URL 读取图像。以下是使用 io 模块的语法:
示例
下面的示例演示了如何在 PIL 中使用 io 模块从 URL 打开图像。
在这个例子中,为了从 URL 获取响应,我们使用 urllib.request.urlopen() 函数发送 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://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 模块
在 PIL 中从 URL 打开图像的第四种也是最后一种方法是使用 Pillow 模块直接从 URL 打开图像。
示例
下面的示例演示了如何在 PIL 中使用 Pillow 模块从 URL 打开图像。
在这个例子中,为了获取响应,我们使用 requests.get() 函数向 URL 发送 HTTP GET 请求。为了防止将响应立即存储在内存中,我们将 stream 参数指定为 True。
使用 requests.get() 返回的 Response 对象,我们提取所需的原始内容。获得此内容后,我们可以使用 Image.open() 以 PIL 格式访问图片。然后,我们可以使用 show() 方法查看图像。
#imports from PIL import Image import requests my_url = "https://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()