繁体   English   中英

如何在存储到磁盘之前使用Pillow-python获取KB大小的图像大小?

[英]How to get image size in KB while using Pillow-python before storing to disk?

我正在使用Pillow在Python中进行图像处理,

url="http://www.image.com/some_image.jpg";

path = io.BytesIO(urllib.request.urlopen(url).read())

original_image = Image.open(path)

知道如何使用Pillow获取此图像文件的大小? 我想在将图像存储到磁盘之前处理图像的大小

答案取决于您保存图像的格式,因此最准确的解决方案将是:

>>> out = io.BytesIO()
>>> original_image.save(out, format='png')
>>> out.tell()
# size in bytes

如果您想要未压缩像素数据的大小,则需要知道像素中有多少位。 我不相信这是在Pillow中暴露的,你必须使用original_image.mode查找该值并引用Unpack.c 然后它只是width * height * bytes_per_pixel 如果您的图像使用调色板,它会变得更复杂,我建议只使用第一种方法。

我偶然发现了这个寻找相同要求的问题。 我尝试了kalhartt建议的方法,但它给了我不同的价值。 使用os.stat似乎提供了准确的值。 这是方法和输出的代码。

from PIL import Image
import io, os

print('*** Program Started ***')

image_path_input = '/github/python-01-utilities/image/input/'
image_name_input = '20170708-sky-1873934_1920.jpg'

im = Image.open(image_path_input + image_name_input)

print(im.format, im.size, im.mode)
# print(im.getdata(),im.filename, im.width, im.height, im.info)

# im.show()
out = io.BytesIO()
im.save(out, format='png')
print('File size using io.BytesIO : ',out.tell())

print('File size using os.stat    : ',os.stat(image_path_input + image_name_input).st_size)

print('*** Program Ended ***')

这是输出

JPEG (1920, 1285) RGB
File size using io.BytesIO :  977359
File size using os.stat    :  147162

实际文件大小为147.2 KB(在Ubuntu GUI上显示)。 你可以看到,os.stat在这里给出了正确的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM