PILで画像サイズを取得するにはどうすればよいですか?


回答:


485
from PIL import Image

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

ドキュメントによると。


8
チャネル数も知りたい場合は、を使用してくださいim.mode。PILは少し不可解なので、あなたもnumpyの使用することができます:numpy.array(im).shape
アレックスKreimer

9
@AlexKreimerを使用.shapeすると、高さが最初の2D配列、次に幅になるため、結果は異なる戻り値になることに注意してください。したがってheight, width = np.array(im).shape
ジャック・ヘイルズ

使用してくださいwith
Shital Shah

@AlexKreimer:np.array(im).shapeチャンネル数を返さheightず、むしろ返してwidth
ファリドAlijani

@FäridAlijani確かに、これはテンソルの形状を返します。これには(おそらく)チャネル数が含まれます。あなたはわずか2暗くなるを取得する場合、それはおそらく、チャンネル数が1であることを意味
アレックスKreimer

77

枕を使用できます(ウェブサイトドキュメントGitHubPyPI)。PillowのインターフェースはPILと同じですが、Python 3で動作します。

取り付け

$ pip install Pillow

管理者権限(Debianのsudo)がない場合は、

$ pip install --user Pillow

インストールに関するその他の注意事項はこちらです。

コード

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

速度

これには30336枚の画像に3.21秒必要でした(31x21から424x428までのJPG、KaggleのNational Data Science Bowlからのトレーニングデータ)

これはおそらく、自分で書いたものではなくPillowを使用する最も重要な理由です。また、PIL(python-imaging)の代わりにPillowを使用する必要があります。これは、Python 3で動作するためです。

代替#1:Numpy(非推奨)

私は続けるscipy.ndimage.imread情報がそこにまだあるとして、しかし心に留めておいてください。

imreadは非推奨です!imreadはSciPy 1.0.0で非推奨になり、1.2.0で削除されました。

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()

あるImage.open(filepath)より速いcv2.imread(filepath)方法?
ファリドAlijani

6

以来scipyのはimread、使用を推奨されていませんimageio.imread

  1. インストール- pip install imageio
  2. 使用する height, width, channels = imageio.imread(filepath).shape

3

これは、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)

1

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

0

以下は、チャネルと同様に寸法を示します。

import numpy as np
from PIL import Image

with Image.open(filepath) as img:
    shape = np.array(img).shape
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.