Сжатие и конвертирование в PNG на Python + Pillow

Вкратце: нужно конвертировать большое кол-во разных картинок в формат PNG с определенными параметрами, один из них: размер файла не более 600кб. Выбор пал на python в связке с библиотекой PILLOW, для примера часть кода:

import os.path
from PIL import Image
from PIL import PngImagePlugin

for images in os.listdir(PATH):
            im = Image.open(os.path.join(PATH, images))
            rgb_im = im.convert('RGB')
            # rgb_im = im.quantize(method=2, palette.WEB)
            # rgb_im = im.convert('P')
            rgb_im.save(Copy_to_path + name,
                        format='PNG',
                        quality=72,
                        optimize=True,
                        dpi=(72, 72))

Картинка конвертируется в RGB и сохраняется в PNG с параметрами, которые удалось выделить из документации. DPI как я понял вообще не на что не влияет, optimize=true эквивалентно максимальному сжатию, quality как ни странно тоже не влияет на размер файла.

Основная проблема с большим количеством "шумных" картинок в JPG, которые после конвертации становятся "тяжелее" раз в 5. Как бы я не игрался с конвертацией и сохранением - мне не удается уменьшить размер файла, даже когда преобразовывал цвет в 256 бит.

И тут нужно было бы смириться с тем, что нельзя сотворить невозможное, но тот же пресловутый фотошоп при открытии картинки 1,5мб и сохранении выдал размер 400кб. При этом визуально вообще нет отличий от оригинала, а при конвертации в 256-битный цвет разница была очень сильно видна.

Пример трех картинок + оригинал по ссылке: https://drive.google.com/drive/folders/1OHOhX80ZZnMYcgu9m703ZuSLYXhcyA_a?usp=sharing

Original_263386.jpg (оригинал 2.1мб)

72_263386.png (после конвертации PILLOW весит 1,7мб).

PS_263386.png (после сохранения со сжатием через Adobe Photoshop CS6 весит 420кб).

2quant_263386.png (после операции quantize(method=2), весит 1,4мб).

DPI и размеры картинок одинаковы, визуально между первыми двумя разницы я не вижу, самое большое сжатие которого удалось добиться с PILLOW - 1.4мб используя quantize(method=2), только тут уже явно видно появление артефактов.

Есть у кого нибудь мысли/идеи как можно добиться "адекватного" сжатия изображения формата PNG с PILLOW или иными путями для большого количества файлов?


Ответы (0 шт):