मुझे पीआईएल के साथ चित्र का आकार कैसे मिलेगा?


जवाबों:


484
from PIL import Image

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

प्रलेखन के अनुसार ।


8
यदि आप भी चैनलों की संख्या जानना चाहते हैं, तो आपको उपयोग करना चाहिए im.mode। चूंकि पीआईएल थोड़ा गूढ़ है, इसलिए आप सुन्न का भी उपयोग कर सकते हैं:numpy.array(im).shape
एलेक्स क्रेमर

9
नोट @AlexKreimer कि .shapeऊंचाई के बाद से अलग-अलग रिटर्न में परिणाम का उपयोग करना 2 डी सरणी का पहला है, फिर चौड़ाई। इसलिएheight, width = np.array(im).shape
जैक हेल्स

कृपया उपयोग करें with
शीतल शाह

@AlexKreimer: np.array(im).shapeचैनलों की संख्या वापस नहीं करता है, बल्कि यह रिटर्न heightऔर width!
फरिद अलीजानी

@ FäridAlijani यकीन है कि, यह एक टेंसर का आकार देता है, जिसमें (संभवतः) चैनलों की संख्या शामिल है। यदि आपको केवल 2 डिम मिलते हैं तो इसका मतलब है कि चैनलों की संख्या 1. है
एलेक्स क्रेमर

77

आप पिलो ( वेबसाइट , डॉक्यूमेंटेशन , GitHub , PyPI ) का उपयोग कर सकते हैं । पिलो में पीआईएल के समान इंटरफ़ेस है, लेकिन पायथन 3 के साथ काम करता है।

स्थापना

$ pip install Pillow

यदि आपके पास व्यवस्थापक अधिकार नहीं हैं (डेबियन पर sudo), तो आप उपयोग कर सकते हैं

$ pip install --user Pillow

स्थापना के बारे में अन्य नोट्स यहाँ हैं

कोड

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

गति

इसके लिए ३०३३६ छवियों के लिए ३.२१ सेकंड की आवश्यकता थी (जेपीजी ३१x२१ से ४२४-१४२21२ तक, कागले पर राष्ट्रीय डेटा विज्ञान बाउल से प्रशिक्षण डेटा )

यह शायद कुछ स्व-लिखित के बजाय तकिया का उपयोग करने का सबसे महत्वपूर्ण कारण है। और आपको पीआईएल (अजगर-इमेजिंग) के बजाय पिलो का उपयोग करना चाहिए, क्योंकि यह पायथन 3 के साथ काम करता है।

वैकल्पिक # 1: Numpy (पदावनत)

मुझे scipy.ndimage.imreadजानकारी है कि जानकारी अभी भी बाहर है, लेकिन ध्यान रखें:

इम्प्रूव किया हुआ है! imread को SciPy 1.0.0 में चित्रित किया गया है, और [1.2] में हटा दिया गया था।

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)?
फरिद अलीजानी

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.