Использование jpegoptim с PIL в easy-thumbnails - PullRequest
1 голос
/ 20 марта 2012

Я хочу обработать все эскизы JPEG, созданные с помощью easy-thumbnail через PIL через jpegoptim .

с использованием оптимизации PIL:image.save(..,optimize=1,...) не слишком много оптимизирует.

Например:

  • с PIL: 123KB
  • с PIL +, оптимизация: 112KB
  • с PIL + optimize + jpegoptim: 52KB

Может кто-нибудь указать мне примеры Python или библиотеки, которые интегрируют jpegoptim?

Ответы [ 3 ]

6 голосов
/ 25 сентября 2012

Вы можете использовать сигнал thumbnail_created и вызывать внешнее приложение через subporecess.Popen.Я просто осознаю это в своем проекте.Вы даже можете оптимизировать изображения, когда они загружены, используя сигнал saved_file!

Вот мой код:

import subprocess
from os.path import splitext

from django.dispatch import receiver
from easy_thumbnails.signals import saved_file, thumbnail_created

@receiver(saved_file)
def optimize_file(sender, fieldfile, **kwargs):
    optimize(fieldfile.path)

@receiver(thumbnail_created)
def optimize_thumbnail(sender, **kwargs):
    optimize(sender.path)

def optimize(path):
    runString = {
        ".jpeg": u"jpegoptim -f --strip-all '%(file)s'",
        ".jpg": u"jpegoptim -f --strip-all '%(file)s'",
        ".png": u"optipng -force -o7 '%(file)s' && advpng -z4 '%(file)s' && pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time '%(file)s' '%(file)s.bak' && mv '%(file)s.bak' '%(file)s'"
    }

    ext = splitext(path)[1].lower()
    if ext in runString:
        subprocess.Popen(runString[ext] % {'file': path}, shell=True)

runString взят из trimage .В Debian вам необходимо установить следующие пакеты: jpegoptim optipng pngcrush advancecomp.Или просто используйте другие инструменты, такие как smush.py.


Я также нашел этот проект , который инкапсулирует код выше, имеет поддержку gif и лучшее распознавание типов файлов.

2 голосов
/ 23 марта 2012

Я нашел https://github.com/thebeansgroup/smush.py, который является оптимизатором изображения без потерь в Python> = 2.7. Я пошел с https://github.com/beatak/smush.py, который является форком, который работает для Python> = 2.5, так как мы используем debian stable на нашем сервере.

Используется:

Надеемся, что использование pngnq несколько раз для файлов не ухудшает качество, мы планируем запускать этот скрипт на всех загружаемых носителях еженедельно.

0 голосов
/ 20 марта 2012

Я сомневаюсь, что есть какие-либо привязки Python к jpegoptim.Возможные варианты:

...