ฉันจะทำให้ขนาดรูปภาพข้างเคียงด้วย PIL หรือไลบรารี Python อื่น ๆ ได้อย่างไร?
ฉันจะทำให้ขนาดรูปภาพข้างเคียงด้วย PIL หรือไลบรารี Python อื่น ๆ ได้อย่างไร?
คำตอบ:
im.mode
หากคุณยังต้องการที่จะทราบจำนวนของช่องทางที่คุณควรใช้ เนื่องจาก PIL เป็นความลับเล็กน้อยคุณสามารถใช้ numpy:numpy.array(im).shape
.shape
ผลลัพธ์ในการส่งคืนที่แตกต่างกันเนื่องจากความสูงเป็นครั้งแรกของอาร์เรย์ 2d แล้วตามด้วยความกว้าง ดังนั้นheight, width = np.array(im).shape
with
กรุณาใช้
np.array(im).shape
ไม่ส่งคืนจำนวนช่องสัญญาณ แต่จะส่งคืนheight
และwidth
!
คุณสามารถใช้หมอน ( เว็บไซต์ , เอกสาร , 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
ฉันเก็บไว้scipy.ndimage.imread
เป็นข้อมูลยังคงอยู่ที่นั่น แต่โปรดจำไว้ว่า:
imread เลิกใช้แล้ว! imread เลิกใช้แล้วใน SciPy 1.0.0 และ [ถูก] ลบออกใน 1.2.0
import scipy.ndimage
height, width, channels = scipy.ndimage.imread(filepath).shape
import pygame
img = pygame.image.load(filepath)
width = img.get_width()
height = img.get_height()
Image.open(filepath)
เร็วกว่าcv2.imread(filepath)
วิธีการ?
ตั้งแต่scipy
's จะเลิกใช้imread
imageio.imread
pip install imageio
height, width, channels = imageio.imread(filepath).shape
นี่เป็นตัวอย่างการโหลดภาพสมบูรณ์จาก 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)
นี่เป็นวิธีที่คุณจะได้ขนาดภาพจาก 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
การติดตามมีมิติและช่อง:
import numpy as np
from PIL import Image
with Image.open(filepath) as img:
shape = np.array(img).shape