Python 如何在PIL中打开URL中的图像

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

输出

Python 如何在PIL中打开URL中的图像

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

输出

Python 如何在PIL中打开URL中的图像

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

输出

Python 如何在PIL中打开URL中的图像

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

输出

Python 如何在PIL中打开URL中的图像

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程