如何使用PIL获得图片大小?

时间:2011-06-22 18:17:09

标签: python python-imaging-library image

如何使用PIL或任何其他Python库获取图片的大小?

7 个答案:

答案 0 :(得分:329)

from PIL import Image

im = Image.open('whatever.png')
width, height = im.size

根据documentation

答案 1 :(得分:61)

您可以使用枕头(WebsiteDocumentationGitHubPyPI)。 Pillow与PIL具有相同的界面,但与Python 3一起使用。

安装

$ pip install Pillow

如果您没有管理员权限(Debian上的sudo),您可以使用

$ pip install --user Pillow

有关安装的其他说明是here

代码

from PIL import Image
with Image.open(filepath) as img:
    width, height = img.size

速度

30336张图片需要3.21秒(JPG从31x21到424x428,来自National Data Science Bowl的Kaggle训练数据)

这可能是使用Pillow而非自编的最重要原因。你应该使用Pillow而不是PIL(python-imaging),因为它适用于Python 3。

备选方案#1:Numpy

import scipy.ndimage
height, width, channels = scipy.ndimage.imread(filepath).shape

备选方案#2:Pygame

import pygame
img = pygame.image.load(filepath)
width = img.get_width()
height = img.get_height()

答案 2 :(得分:3)

由于不推荐使用scipy imread,请使用imageio.imread

  1. 安装 - pip install imageio
  2. 使用height, width, channels = imageio.imread(filepath).shape

答案 3 :(得分:1)

请注意,PIL不会应用EXIF旋转信息(至少在v7.1.1之前;在许多jpg中使用)。快速解决此问题的方法:

def get_image_dims(file_path):
    from PIL import Image as pilim
    im = pilim.open(file_path)
    # returns (w,h) after rotation-correction
    return im.size if im._getexif().get(274,0) < 5 else im.size[::-1]

答案 4 :(得分:0)

这是一个完整的示例,该示例从URL加载图像,使用PIL创建,打印尺寸并调整大小...

import requests
h = { 'User-Agent': 'Neo'}
r = requests.get("https://images.freeimages.com/images/large-previews/85c/football-1442407.jpg", headers=h)

from PIL import Image
from io import BytesIO
# create image from binary content
i = Image.open(BytesIO(r.content))


width, height = i.size
print(width, height)
i = i.resize((100,100))
display(i)

答案 5 :(得分:0)

这是在Python 3中从给定URL获取图像大小的方法。

from PIL import Image
import urllib.request
from io import BytesIO

file = BytesIO(urllib.request.urlopen('http://getwallpapers.com/wallpaper/full/b/8/d/32803.jpg').read())
im = Image.open(file)
width, height = im.size

答案 6 :(得分:0)

以下内容提供了尺寸以及渠道:

import numpy as np
from PIL import Image

with Image.open(filepath) as img:
    shape = np.array(img).shape