PIL을 사용하여 사진 크기를 어떻게 얻습니까?


답변:


484
from PIL import Image

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

설명서 에 따르면 .


8
채널 수도 알고 싶다면을 사용해야합니다 im.mode. PIL은 약간 암호이므로 numpy를 사용할 수도 있습니다.numpy.array(im).shape
Alex Kreimer

9
@AlexKreimer는 .shape높이가 2D 배열의 첫 번째 너비 이후 너비이므로 다른 반환 결과 를 가져온다는 점에 유의하십시오 . 그러므로height, width = np.array(im).shape
Jack Hales

를 사용하십시오 with.
Shital Shah

@AlexKreimer : np.array(im).shape채널 수를 반환하지 않고 오히려 반환 height하고 width!
Färid Alijani

@ FäridAlijani, 그것은 아마도 텐서의 모양을 반환하는데, 이것은 아마도 채널의 수를 포함합니다. 당신 만이 희미을 얻는 경우에 아마 채널의 수는 1입니다 것을 의미한다
알렉스 Kreimer

77

Pillow ( Website , Documentation , GitHub , PyPI )를 사용할 수 있습니다 . 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

속도

이것은 (데이터를 훈련, 31x21에서 424x428으로 JPG를 30,336 이미지를 3.21 초 필요한 국가 데이터 과학 볼 Kaggle에)

이것은 아마도 자체 작성하는 대신 베개를 사용하는 가장 중요한 이유 일 것입니다. 그리고 파이썬 3에서 작동하기 때문에 PIL (python-imaging) 대신 Pillow를 사용해야합니다.

대안 # 1 : Numpy (더 이상 사용되지 않음)

나는 scipy.ndimage.imread정보가 여전히 존재하지만 계속 명심하십시오.

이미 사용되지 않습니다! imci는 SciPy 1.0.0에서 더 이상 사용되지 않으며 1.2.0에서 제거되었습니다.

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

대안 # 2 : 파이 게임

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

입니다 Image.open(filepath)보다 빠른 cv2.imread(filepath)방법은?
Färid 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

파이썬 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.