¿Cómo consigo el tamaño de la imagen con PIL?

¿Cómo obtengo el tamaño de los lados de una imagen con PIL o cualquier otra biblioteca de Python?

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

Según la documentación .

Puede usar Pillow ( sitio web , documentación , GitHub , PyPI ). Pillow tiene la misma interfaz que PIL, pero funciona con Python 3.

Instalación

 $ pip install Pillow 

Si no tiene derechos de administrador (sudo en Debian), puede usar

 $ pip install --user Pillow 

Otras notas sobre la instalación están aquí .

Código

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

Velocidad

Esto necesitó 3.21 segundos para 30336 imágenes (JPG de 31×21 a 424×428, datos de entrenamiento de National Data Science Bowl en Kaggle)

Esta es probablemente la razón más importante para usar una almohada en lugar de algo escrito por uno mismo. Y debes usar la almohada en lugar de la PIL (imagen de python), porque funciona con Python 3.

Alternativa # 1: Numpy

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

Alternativa # 2: Pygame

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

Ya que el scipy de imread está en desuso, use imageio.imread .

  1. Instalar – pip install imageio
  2. Use height, width, channels = imageio.imread(filepath).shape

Este es un ejemplo completo cargando una imagen desde una URL, creando con PIL, imprimiendo el tamaño y cambiando el tamaño …

 import requests h = { 'User-Agent': 'Neo'} r = requests.get("http://sofes.miximages.com/python/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)