Làm cách nào để có được kích thước hình ảnh với PIL?


Câu trả lời:


485
from PIL import Image

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

Theo tài liệu .


8
Nếu bạn cũng muốn biết số lượng kênh, bạn nên sử dụng im.mode. Vì PIL hơi khó hiểu, bạn cũng có thể sử dụng numpy:numpy.array(im).shape
Alex Kreimer

9
Lưu ý @AlexKreimer rằng sử dụng .shapekết quả trong các lợi nhuận khác nhau vì chiều cao là đầu tiên của mảng 2d, sau đó là chiều rộng. Do đóheight, width = np.array(im).shape
Jack Hales

Hãy sử dụng with.
Shital Shah

@AlexKreimer: np.array(im).shapeKHÔNG trả về số lượng kênh, nó trả về heightwidth!
Färid Alijani

@ FäridAlijani chắc chắn, nó trả về hình dạng của một tenxơ, trong đó (có thể) bao gồm số lượng kênh. Nếu bạn chỉ nhận được 2 độ mờ thì có lẽ số lượng kênh là 1.
Alex Kreimer

77

Bạn có thể sử dụng Gối ( Trang web , Tài liệu , GitHub , PyPI ). Gối có giao diện giống như PIL, nhưng hoạt động với Python 3.

Cài đặt

$ pip install Pillow

Nếu bạn không có quyền quản trị viên (sudo trên Debian), bạn có thể sử dụng

$ pip install --user Pillow

Các ghi chú khác liên quan đến việc cài đặt ở đây .

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

Tốc độ

Điều này cần 3,21 giây cho 30336 hình ảnh (JPG từ 31x21 đến 424x428, dữ liệu đào tạo từ National Data Science Bowl trên Kaggle)

Đây có lẽ là lý do quan trọng nhất để sử dụng Gối thay vì một cái gì đó tự viết. Và bạn nên sử dụng Gối thay vì PIL (hình ảnh trăn), vì nó hoạt động với Python 3.

Phương án số 1: Numpy (không dùng nữa)

Tôi giữ scipy.ndimage.imreadnhư thông tin vẫn còn đó, nhưng hãy ghi nhớ:

imread bị phản đối! imread bị phản đối trong SciPy 1.0.0 và [đã] bị xóa trong 1.2.0.

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

Phương án số 2: Pygame

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

Image.open(filepath)nhanh hơn so với cv2.imread(filepath)phương pháp?
Färid Alijani

6

Từ scipy's imreadbị phản đối, sử dụng imageio.imread.

  1. Tải về - pip install imageio
  2. Sử dụng height, width, channels = imageio.imread(filepath).shape

3

Đây là một ví dụ hoàn chỉnh tải hình ảnh từ URL, tạo bằng PIL, in kích thước và thay đổi kích thước ...

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

Đây là cách bạn có được kích thước hình ảnh từ URL đã cho trong 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

0

Theo dõi cho kích thước cũng như các kênh:

import numpy as np
from PIL import Image

with Image.open(filepath) as img:
    shape = np.array(img).shape
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.