Odpowiedzi:
from PIL import Image
im = Image.open('whatever.png')
width, height = im.size
Zgodnie z dokumentacją .
im.mode
. Ponieważ PIL jest nieco tajemniczy, możesz także użyć numpy:numpy.array(im).shape
.shape
powoduje różne zwroty, ponieważ wysokość jest pierwszą z tablicy 2d, a następnie szerokością. Dlategoheight, width = np.array(im).shape
with
.
np.array(im).shape
NIE zwraca liczby kanałów, raczej zwraca height
i width
!
Możesz użyć Pillow ( strona internetowa , dokumentacja , GitHub , PyPI ). Poduszka ma taki sam interfejs jak PIL, ale współpracuje z Python 3.
$ pip install Pillow
Jeśli nie masz uprawnień administratora (sudo na Debianie), możesz użyć
$ pip install --user Pillow
Inne uwagi dotyczące instalacji są tutaj .
from PIL import Image
with Image.open(filepath) as img:
width, height = img.size
Wymagało to 3,21 sekundy na 30336 zdjęć (JPG od 31x21 do 424x428, dane treningowe z National Data Science Bowl na Kaggle)
Jest to prawdopodobnie najważniejszy powód, aby używać poduszki zamiast czegoś napisanego samodzielnie. I powinieneś używać Pillow zamiast PIL (obrazowanie python), ponieważ działa z Python 3.
Trzymam, scipy.ndimage.imread
ponieważ informacje są nadal dostępne, ale pamiętaj:
odczytywanie jest przestarzałe! Imread jest przestarzały w SciPy 1.0.0, a [został] usunięty w 1.2.0.
import scipy.ndimage
height, width, channels = scipy.ndimage.imread(filepath).shape
import pygame
img = pygame.image.load(filepath)
width = img.get_width()
height = img.get_height()
Image.open(filepath)
szybszy niż cv2.imread(filepath)
metoda?
Ponieważ scipy
„s imread
jest przestarzała, użycie imageio.imread
.
pip install imageio
height, width, channels = imageio.imread(filepath).shape
To kompletny przykład ładowania obrazu z adresu URL, tworzenia za pomocą PIL, drukowania rozmiaru i zmiany rozmiaru ...
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)
Oto jak uzyskać rozmiar obrazu z podanego adresu URL w Python 3:
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
Poniżej podano wymiary oraz kanały:
import numpy as np
from PIL import Image
with Image.open(filepath) as img:
shape = np.array(img).shape