保存前确定jpeg和png图像的图像大小

时间:2018-12-25 02:19:33

标签: python image python-imaging-library

我正在从剪贴板上拍摄图像,并试图确定在实际保存图像之前要在硬盘驱动器上占用多少空间。我找不到正确的代码来完成此操作。

我正在使用以下代码:

node_modules

它总是返回npm cache verify。即使是空白的白色部分图像,from PIL import Image, ImageGrab from io import BytesIO def jpeg_or_png(img): img_file = BytesIO() img.save(img_file, 'png') img_file_size_png = img_file.tell() img_file = BytesIO() img.save(img_file, 'jpeg') img_file_size_jpeg = img_file.tell() if img_file_size_jpeg < img_file_size_png: return 'jpeg' else: return 'png' img = ImageGrab.grabclipboard() if img: print(jpeg_or_png(img)) 的效率也更高。

如果我保存了两个版本,当然jpeg的大小较小,但是该函数仍返回png

理想情况下,我想确定哪个扩展将占用更少的空间而不保存它。我知道我可以同时保存这两个文件,然后找出最大的文件并将其删除。但这是不好的做法和形式,因为这样做会占用空间。

1 个答案:

答案 0 :(得分:1)

您的代码为我工作。为了帮助诊断,您可以修改函数以将图像的大小作为字典返回。

def jpeg_or_png(img):
    j = BytesIO()
    img.save(j, 'jpeg')
    p = BytesIO()
    img.save(p, 'png')
    return {'jpg': j.tell(), 'png':p.tell()}

以下是两个具有不同屏幕截图的测试:

jpeg_or_png(ImageGrab.grabclipboard())
# returns:
{'jpg': 21753, 'png': 232163}

此图片:

enter image description here

jpeg_or_png(ImageGrab.grabclipboard())
# returns:
{'jpg': 7479, 'png': 3602}

此图片:

enter image description here