首页 > 解决方案 > 如何在不本地存储的情况下知道图像文件大小

问题描述

我正在创建一个合并两个未存储在本地的图像的程序,这第三个图像,合并的一个,是一个 PIL 图像,我需要检查图像文件大小,如果它超过一定大小,我需要压缩它.

这是我的代码:


def concat_image_auto(image1,image2,size_image):
    if size[0]>size[1]:
        ## vertical
        dst = Image.new('RGB', (size_image[0], image1.height + image2.height))
        dst.paste(image1, (0, 0))
        dst.paste(image2, (0, image1.height))
    else:
        ## horizontal
        dst = Image.new('RGB', (image1.width + image2.width, size_image[1]))
        dst.paste(image1, (0, 0))
        dst.paste(image2, (image1.width, 0))
    return dst


image1 = Image.open('my_first_image.jpg')     
image2 = Image.open('my_second_image.jpg') 

max_w = max(image1.size[0],image2.size[0])
max_h = max(image1.size[1],image2.size[1])
size = (max_w,max_h)
image1 = image1.resize(size)
image2 = image2.resize(size)

#Merging
file_merged = concat_image_auto(image1,image2,size)

#Check filesize and compress if needed

我怎样才能做到这一点?(我无法将图像保存在内存中)

标签: pythonpython-3.x

解决方案


可以把图片保存在内存中,然后看看结果有多大:

with io.BytesIO() as output:
    file_merged.save(output, format="PNG")
    size = output.getbuffer().nbytes

因为你使用with后的数据被丢弃


推荐阅读