我正在从剪贴板上拍摄图像,并试图确定在实际保存图像之前要在硬盘驱动器上占用多少空间。我找不到正确的代码来完成此操作。
我正在使用以下代码:
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
。
理想情况下,我想确定哪个扩展将占用更少的空间而不保存它。我知道我可以同时保存这两个文件,然后找出最大的文件并将其删除。但这是不好的做法和形式,因为这样做会占用空间。
答案 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}
此图片:
jpeg_or_png(ImageGrab.grabclipboard())
# returns:
{'jpg': 7479, 'png': 3602}
此图片: