আমি পিআইএল দিয়ে ছবির আকারটি কীভাবে পাব?


উত্তর:


484
from PIL import Image

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

ডকুমেন্টেশন অনুযায়ী ।


8
আপনি যদি চ্যানেলের সংখ্যা জানতে চান তবে আপনার ব্যবহার করা উচিত im.mode। পিআইএল যেহেতু কিছুটা ক্রিপ্টিক, আপনি এও নকল ব্যবহার করতে পারেন:numpy.array(im).shape
অ্যালেক্স ক্রিমার

9
@ অ্যালেক্সক্রিমার নোট করুন .shapeযেহেতু উচ্চতাটি বিভিন্ন রিটার্নে ফলাফল ব্যবহার করা 2 ডি অ্যারের প্রথম, তারপরে প্রস্থ। অতএবheight, width = np.array(im).shape
জ্যাক হেলস

দয়া করে ব্যবহার করুন with
শীতল শাহ

@ অ্যালেক্সক্রিমার: np.array(im).shapeচ্যানেলের সংখ্যা ফিরিয়ে দেয় না, এটি পরিবর্তিত হয় heightএবং width!
ফ্রিদ আলজানী

@ ফ্যরিডআলিজানী নিশ্চিত, এটি একটি টেনসরের আকার দেয়, যা (সম্ভবত) চ্যানেলের সংখ্যা অন্তর্ভুক্ত করে। আপনি যদি মাত্র ২
ডিম

77

আপনি বালিশ ( ওয়েবসাইট , ডকুমেন্টেশন , গিটহাব , পিপিআই ) ব্যবহার করতে পারেন । বালিশের পিআইএল এর মতো একই ইন্টারফেস রয়েছে তবে পাইথন 3 এর সাথে কাজ করে।

স্থাপন

$ pip install Pillow

আপনার যদি প্রশাসকের অধিকার না থাকে (ডিবিয়ানে সুডো), আপনি এটি ব্যবহার করতে পারেন

$ pip install --user Pillow

ইনস্টলেশন সংক্রান্ত অন্যান্য নোটগুলি এখানে রয়েছে

কোড

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

গতি

30336 চিত্রের জন্য এটি 3.21 সেকেন্ডের প্রয়োজন (31x21 থেকে 424x428 এর জেপিজি, কেগল-এ জাতীয় ডেটা সায়েন্স বাউলের প্রশিক্ষণ ডেটা )

স্ব-লেখার পরিবর্তে বালিশটি ব্যবহার করার সম্ভবত এটি সবচেয়ে গুরুত্বপূর্ণ কারণ। এবং আপনার পিআইএল (পাইথন-ইমেজিং) এর পরিবর্তে বালিশ ব্যবহার করা উচিত, কারণ এটি পাইথন 3 এর সাথে কাজ করে।

বিকল্প # 1: নম্পি (অবচয়)

scipy.ndimage.imreadতথ্য এখনও আছে বলে আমি রাখি , তবে মনে রাখবেন:

পড়ার অবমূল্যায়ন! আইপিডিকে সায়পাই ১.০.০ এ অবমূল্যায়ন করা হয়েছে, এবং [1.2] কে 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)পদ্ধতি?
ফ্রিদ আলিজানী

6

যেহেতু scipyএর imreadঅবহেলিত, তাই ব্যবহার করুন imageio.imread

  1. ইনস্টল করুন - pip install imageio
  2. ব্যবহার height, width, channels = imageio.imread(filepath).shape

3

এটি ইউআরএল থেকে চিত্র লোড করা, পিআইএল দিয়ে তৈরি করা, আকার মুদ্রণ করা ও পুনরায় আকার দেওয়ার একটি সম্পূর্ণ উদাহরণ ...

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 তে প্রদত্ত ইউআরএল থেকে আপনি চিত্রের আকারটি কীভাবে পাবেন তা এখানে:

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.