python - 在 easy-thumbnails 中使用 jpegoptim 和 PIL

标签 python django png jpeg gif

我想处理用 easy-thumbnail 生成的所有 JPEG 缩略图通过PIL通过 jpegoptim .

使用 PIL 的优化:image.save(..,optimize=1,...) 根本没有优化太多。

例如:

  • PIL:123KB
  • 使用 PIL + 优化:112KB
  • 使用 PIL + 优化 + jpegoptim:52KB

谁能告诉我集成 jpegoptim 的 Python 示例或库?

最佳答案

您可以使用thumbnail_created 信号并通过subporcess.Popen 调用外部应用程序。我只是在我的项目中意识到这一点。您甚至可以在使用 saved_file 信号上传图片时对其进行优化!

Here is我的代码:

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


我还找到了this project它封装了上面的代码,具有 gif 支持和更好的文件类型识别。

关于python - 在 easy-thumbnails 中使用 jpegoptim 和 PIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779052/

相关文章:

javascript - 使用 src blob Canvas 到 img

scala - 在 Scala 中处理图像

python - 基于列表的一个字段按数据分组

python - Tkinter 与 openweather

HTML 输入文件 - 如何翻译 "Choose File"和 "No file Chosen"?

python - MySQL Encoding 4 byte in 3 byte utf-8 - 不正确的字符串值

python - 你能同时检查机器人框架中的多个 URL 吗?

python - 使用 Python 发送数千个 post 请求的最快方法是什么?

Django - 创建或删除对象

image - 如何在JavaCV中将png透明层更改为白色