PIL ile resim boyutunu nasıl alabilirim?


Yanıtlar:


485
from PIL import Image

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

Belgelere göre .


8
Kanal sayısını da bilmek istiyorsanız, kullanmalısınız im.mode. PIL biraz şifreli olduğundan, numpy da kullanabilirsiniz:numpy.array(im).shape
Alex Kreimer

9
@AlexKreimer, .shapeyükseklik 2d dizisinin ilkinden sonra genişlikten beri farklı döndürmelerde sonuçların kullanıldığını unutmayın . Bu nedenleheight, width = np.array(im).shape
Jack Hales

Lütfen kullanın with.
Shital Shah

@AlexKreimer: np.array(im).shapeKanal sayısını döndürmez, daha çok döndürür heightve width!
Färid Alijani

@ FäridAlijani elbette, (muhtemelen) kanal sayısını içeren bir tensörün şeklini döndürür. Sadece 2 dim alırsanız, muhtemelen kanal sayısı 1'dir.
Alex Kreimer

77

Yastık ( Web Sitesi , Belgeler , GitHub , PyPI ) kullanabilirsiniz. Yastık PIL ile aynı arayüze sahiptir, ancak Python 3 ile çalışır.

Kurulum

$ pip install Pillow

Yönetici haklarınız yoksa (Debian'da sudo),

$ pip install --user Pillow

Kurulumla ilgili diğer notlar burada .

kod

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

hız

Bu 30336 görüntüler için 3.21 saniye gerekiyordu (31x21'den 424x428'e JPG'ler, Kaggle'daki Ulusal Veri Bilimi Kasesi'nden eğitim verileri )

Muhtemelen kendi kendine yazılan bir şey yerine Yastık kullanmanın en önemli nedeni budur. Pyt (Python-Imaging) yerine Yastık kullanmalısınız, çünkü Python 3 ile çalışır.

Alternatif # 1: Numpy (kullanımdan kaldırıldı)

Ben tutmak scipy.ndimage.imreadbilgiler hala dışarıda olarak değil, akılda tutmak:

imread kullanımdan kaldırıldı! imread, SciPy 1.0.0'da kullanımdan kaldırılmıştır ve 1.2.0'da [kaldırılmıştır].

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

Alternatif # 2: Pygame

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

olduğunu Image.open(filepath)daha hızlı cv2.imread(filepath)yöntemle?
Färid Alijani

6

Yana scipy'ın imreaditiraz edildi, kullanım imageio.imread.

  1. Yüklemek - pip install imageio
  2. kullanım height, width, channels = imageio.imread(filepath).shape

3

Bu, URL'den resim yükleme, PIL ile oluşturma, boyutu yazdırma ve yeniden boyutlandırma ...

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)

1

Görüntü boyutunu Python 3'te verilen URL'den nasıl elde edeceğiniz aşağıda açıklanmıştır:

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

0

Arkadaşlar kanalların yanı sıra boyutlar da verir:

import numpy as np
from PIL import Image

with Image.open(filepath) as img:
    shape = np.array(img).shape
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.