python - 如何在不本地存储的情况下知道图像文件大小
问题描述
我正在创建一个合并两个未存储在本地的图像的程序,这第三个图像,合并的一个,是一个 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
我怎样才能做到这一点?(我无法将图像保存在内存中)
解决方案
可以把图片保存在内存中,然后看看结果有多大:
with io.BytesIO() as output:
file_merged.save(output, format="PNG")
size = output.getbuffer().nbytes
因为你使用with
后的数据被丢弃
推荐阅读
- swift - 在 VSTS 上的云托管 Mac 上的 Xcode 中构建错误
- node.js - 从 React Native -> ROS -> Postgres 在(postgres 节点适配器)中同步分段错误
- elasticsearch - Elasticsearch 全文搜索和精确匹配
- c++ - C++递归如何在while中使用if语句
- office365 - 使用 Microsoft-Graph API 更新 O365 用户密码
- angular - 如何在角度 4 中运行单元测试特定组件
- c# - 尝试在 C# 中实现有限状态机但无法转换派生类型
- firebase - 没有云功能或 Firebase 控制台的 Firebase 通知
- java - 如何在 JPQL 中使用别名
- firebase - Firestore 自动生成的 ID 会包含 _ 下划线吗?