如何在Python中用PIL获取图像的大小

3,409 阅读4分钟

问题的提出

给定一张图片,如何用PIL或其他Python库获得图片的大小?

用Python PIL(Python Image Library)获得图像的大小,基本上意味着你想获得它的高度和宽度,单位是像素。

例子:考虑一下下面的图片。

在此下载图片

🔥挑战。用 PIL或其他Python库获取上述图片的大小。

方法 1: 使用 img.size

方法:要获得图像的大小
➢ 通过调用PIL函数Image.open('image file path') ,将其打开。
➢ 然后在打开的图像上使用PIL属性image.size 。这将返回一个包含图像宽度和高度的元组,单位为像素。
➢ 在两个不同的变量中解包该元组,以单独存储宽度和高度。

代码。

from PIL import Image
img = Image.open("image.jpg")
width, height = img.size
print(f'width: {width}\nheight: {height}')

输出。

width: 640
height: 426

#另一种表述方式

您可以使用 img.size 属性,而不是使用img.widthimg.height 属性来分别存储/显示图像的高度和宽度。

下面的代码演示了如何使用PIL库的宽度和高度属性。

from PIL import Image
img = Image.open("image.jpg")
width = img.width
height = img.height
print(f'width: {width}\nheight: {height}')

输出。

width: 640
height: 426

🗨小知识: PIL(Python Imaging Library)是一个用于图像处理的Python库。它支持许多图像格式,包括 "jpeg", "png", "ppm", "tiff", "bmp", "gif", 等。它是一个非常有用的库,提供了大量的图像编辑功能,如获取图像的大小,裁剪图像等。PIL库的Image 模块被用来表示PIL图像。

  • 要安装PIL,请在你的终端执行以下命令。pip install pillow

方法2:使用Open-CV获取图像大小

方法。使OpenCV获得图像的大小
➢ 通过调用OpenCV函数**imread('file_path')** ,从指定路径加载图像。
➢ 在该图像上使用**.shape**属性。这将返回一个由高度、宽度(像素)和图像的通道数组成的元组。
➢ 在三个不同的变量中分别解压这些值,并显示相应的输出。

代码。

import cv2
image = cv2.imread('image.jpg')
height, width, channel = image.shape
print(f"width:{width}\nheight:{height}")

输出。

width: 640
height: 426

✏注意: 使用下面的命令来安装OpenCV。pip install opencv-python

方法3:使用Pygame获取图像大小

  • 方法。
    • 使用pygame函数pygame.image.load('filepath') ,从其路径加载图像。
    • 使用方法img.get_width()img.get_height() 来获得图像的宽度和高度,单位为像素。

代码。

import pygame
img = pygame.image.load('image.jpg')
width = img.get_width()
height = img.get_height()
print("width: ", width)
print("height: ", height)

输出。

pygame 2.1.2 (SDL 2.0.18, Python 3.9.10)
Hello from the pygame community. https://www.pygame.org/contribute.html
width: 640
height: 426

🗨小知识: pygameSDL库**(Simple DirectMedia Layer)**的一个Python包装器。SDL允许跨平台访问系统的底层多媒体硬件组件,如视频、声音、键盘、鼠标和操纵杆。由于SDL和pygame ,为我们提供了跨平台的便利,我们可以为几乎所有被它们支持的平台编写游戏程序和创建丰富的多媒体Python程序。

要安装pygame ,请在终端使用以下pip命令。pip install pygame

▣如何获得以字节为单位的图像大小?

之前,我们找出了图像的大小,也就是图像的尺寸(宽度和高度)。然而,你可能还需要找出以字节为单位的文件大小,以决定如何使用该图像文件。因此,让我们深入了解一下帮助我们找到图像的字节大小的方法。

使用os.stat

方法。在 图像文件上调用os.stat() 方法,然后在此图像上使用st_size 属性,以获得其字节数大小。

代码。

import os
print(os.stat('image.jpg').st_size)

# 48297

◩ 使用 os.path.getsize

方法: os.path.getsize() 是os模块的一个方法,用来获取指定路径的大小。将图像路径传给这个函数,以获得图像文件的字节大小。

代码。

import os
print(os.path.getsize('image.jpg'))

# 48297

◩使用PIL

方法。调 用PIL函数Image.open() ,打开图像,然后使用len() 方法,在读取图像后找到其长度。

代码。

from PIL import Image
img = Image.open('image.jpg')
print("File Size In Bytes:- "+str(len(img.fp.read())))

🎁奖励:通过从URL加载图片获得图片的大小

下面的代码演示了如何从一个URL加载图像,然后得到它的大小。

代码。

import requests
from PIL import Image
from io import BytesIO
header = {'User-Agent': 'Mozilla/5.0 (X11; CrOS x86_64 14588.98.0) AppleWebKit/537.36 (KHTML, like Gecko) '
                   'Chrome/101.0.4951.59 Safari/537.36'}
res = requests.get("https://blog.finxter.com/wp-content/uploads/2022/05/sample_img.png", headers=header)
# create image from binary content
img = Image.open(BytesIO(res.content))
width, height = img.size
print(f'width:{width}, height:{height}')

输出。

width:867, height:489

结论

我们成功地找到了许多问题的答案,包括如何使用不同的库来寻找图像的大小--尺寸以及字节大小。我希望这个教程能帮助你。