如何在不本地存储的情况下知道图像文件大小
Posted
技术标签:
【中文标题】如何在不本地存储的情况下知道图像文件大小【英文标题】:How to know the Image filesize without storing locally 【发布时间】:2021-07-01 09:31:54 【问题描述】:我正在创建一个合并两个未存储在本地的图像的程序,这第三个图像,合并的一个,是一个 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
我该怎么做? (我无法将图像保存在内存中)
【问题讨论】:
@StrangeSorcerer 我认为 OP 指的是图像的字节大小,而不是它的 (width,height) 哦,对了,对不起。在这种情况下,ady 对这个类似问题的回答是否有帮助? ***.com/questions/11904083/… 我不需要 W 和 H 值,但文件大小以 Kb 或 Mb 为单位。 【参考方案1】:你可以把图片保存在内存中,然后看看结果有多大:
with io.BytesIO() as output:
file_merged.save(output, format="PNG")
size = output.getbuffer().nbytes
因为你使用with
,所以之后数据被丢弃
【讨论】:
我无法将图像保存在内存中 为什么会这样?请更具体。你有错误吗?图片是不是很大,内存不够? 因为我正在使用 AWS Lambda,所以我无法在本地存储,直到我没有完成这项工作。压缩图像准备好后,我必须将其存储在 S3 存储桶中。 是的。此代码不会将其存储在本地磁盘/文件系统上,您无法在 Lambda 上使用它。它将它存储在内存中,您可以在 Lambda 上随意使用它 好的,但是我得到这个错误:模块'io'没有属性'getbuffer'以上是关于如何在不本地存储的情况下知道图像文件大小的主要内容,如果未能解决你的问题,请参考以下文章
如何在不缩小图像的情况下在 Android 中调整图像大小?
java - 如何在不创建对象的情况下找出文件和目录的大小?