问题:如何使用PIL获取图片尺寸?
如何使用PIL或任何其他Python库获取图片边的大小?
回答 0
from PIL import Image
im = Image.open('whatever.png')
width, height = im.size
根据文档。
回答 1
您可以使用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
速度
这需要3.21秒才能获得30336张图像(JPG从31×21到424×428,来自Kaggle 国家数据科学碗的训练数据)
这可能是使用枕头而不是自己写的东西的最重要的原因。而且您应该使用Pillow而不是PIL(python-imaging),因为它可以在Python 3中使用。
备选方案1:Numpy(已弃用)
我坚持scipy.ndimage.imread
认为信息仍然存在,但请记住:
不推荐使用imread!在SciPy 1.0.0中不推荐使用imread,而在1.2.0中已删除了[read]。
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()
回答 2
由于scipy
的imread
已过时,使用imageio.imread
。
- 安装-
pip install imageio
- 用
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)
回答 4
这是从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
回答 5
以下给出尺寸和通道:
import numpy as np
from PIL import Image
with Image.open(filepath) as img:
shape = np.array(img).shape