我如何得到一个图片的大小与PIL或任何其他Python库?
from PIL import Image im = Image.open('whatever.png') width, height = im.size
根据文档。
你可以使用Pillow (网站, 文档, GitHub, PyPI)。Pillow具有与PIL相同的界面,但与Python 3一起工作。
$ pip install Pillow
如果您没有管理员权限(Debian上的sudo),您可以使用
$ pip install --user Pillow
关于安装的其他注意事项有在这里。
from PIL import Image with Image.open(filepath) as img: width, height = img.size
30336张图片需要3.21秒(jpg格式从31x21到424x428,训练数据来自Kaggle上的国家数据科学大赛)
这可能是使用Pillow而不是自己编写的东西的最重要原因。您应该使用Pillow而不是PIL (Python -imaging),因为它适用于Python 3。
我保留scipy.ndimage.imread,因为信息仍然存在,但请记住:
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()
由于scipy的imread已弃用,请使用imageio.imread。
scipy
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)
下面是在Python 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
以下给出了维度和渠道:
import numpy as np from PIL import Image with Image.open(filepath) as img: shape = np.array(img).shape
注意,PIL不会应用EXIF旋转信息(至少到v7.1.1;在许多jpg中使用)。一个快速修复来适应这个:
def get_image_dims(file_path): from PIL import Image as pilim im = pilim.open(file_path) # returns (w,h) after rotation-correction return im.size if im._getexif().get(274,0) < 5 else im.size[::-1]