Python 以“字节”为单位的图像 - 获取高度、宽度

Python image in `bytes` - get height, width

我试图在将图像保存到数据库和 S3 之前检测图像的 widthheight。图片在 bytes.

这是保存到 Django 之前的图像示例 ImageField:

注意:我不想使用 ImageFields height_fieldwidth_field,因为由于某种原因它会极大地降低服务器速度,所以我想手动进行。

图像是使用请求下载的:

def download_image(url):
    r = requests.get(url, stream=True)
    r.raw.decode_content = True
    return r.content

要从二进制字符串中获取图像的 width/height,您必须尝试使用​​图像库解析二进制字符串。这项工作最简单的一个是 pillow.

import requests
from PIL import Image
import io


def download_image(url):
    r = requests.get(url, stream=True)
    r.raw.decode_content = True
    return r.content


image_url = "https://picsum.photos/seed/picsum/300/200"
image_data = download_image(image_url)

image = Image.open(io.BytesIO(image_data))
width = image.width
height = image.height
print(f'width: {width}, height: {height}')
width: 300, height: 200