Я беру изображение из буфера обмена и пытаюсь определить, сколько изображения займет место на жестком диске, прежде чем его реально сохранить.Я не смог найти правильный код для этого.
Я использую этот код:
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
более эффективно.
Если я сохраню обе версии, и, конечно, .png
будет меньше по размеру, но функция все равно вернет .jpeg
.
В идеале я хочу определить, какое расширение займет меньше места, не сохраняя его.Я знаю, что могу сохранить оба, затем найти самый большой файл и удалить его.Но это плохая практика и форма, чтобы делать это, потому что для этого потребуется место.