ฉันจะได้ขนาดรูปภาพด้วย 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แน่ใจว่ามันคืนค่ารูปร่างของเทนเซอร์ซึ่ง (อาจ) รวมถึงจำนวนช่อง หากคุณได้รับเพียง 2 หรี่มันอาจหมายความว่าจำนวนช่องคือ 1
Alex Kreimer

77

คุณสามารถใช้หมอน ( เว็บไซต์ , เอกสาร , GitHub , PyPI ) หมอนมีส่วนต่อประสานเหมือนกับ PIL แต่ใช้ได้กับ Python 3

การติดตั้ง

$ pip install Pillow

หากคุณไม่มีสิทธิ์ของผู้ดูแลระบบ (sudo บน Debian) คุณสามารถใช้

$ pip install --user Pillow

บันทึกอื่น ๆ เกี่ยวกับการติดตั้งอยู่ที่นี่

รหัส

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

ความเร็ว

สิ่งนี้ต้องการ 3.21 วินาทีสำหรับ 30336 ภาพ (JPG จาก 31x21 ถึง 424x428, ข้อมูลการฝึกอบรมจากNational Data Science Bowlบน Kaggle)

นี่อาจเป็นเหตุผลที่สำคัญที่สุดในการใช้หมอนแทนสิ่งที่เขียนเอง และคุณควรใช้ Pillow แทน PIL (python-imaging) เพราะมันใช้งานได้กับ 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)วิธีการ?
Färid Alijani

6

ตั้งแต่scipy's จะเลิกใช้imreadimageio.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

นี่เป็นวิธีที่คุณจะได้ขนาดภาพจาก URL ที่กำหนดใน 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

การติดตามมีมิติและช่อง:

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.