首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在简单缩略图中使用jpegoptim和PIL

在简单缩略图中使用jpegoptim和PIL
EN

Stack Overflow用户
提问于 2012-03-19 22:46:02
回答 3查看 2.5K关注 0票数 1

我想处理通过简单缩略图通过PIL通过普普提生成的所有JPEG缩略图。

使用PIL的优化:image.save(..,optimize=1,...)一点也不优化。

例如:

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

有人能告诉我集成jpegoptim的Python示例或库吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-22 21:35:39

我发现了https://github.com/thebeansgroup/smush.py,它是Python >=2.7中的一个无损图像优化器。我使用了https://github.com/beatak/smush.py,因为我们在服务器上使用的是>=稳定,这是一个用于PythonDebian2.5的叉子。

它使用:

  • 吉非斯
  • ImageMagick
  • 压碎
  • 杰佩特朗
  • pngnq

希望在文件上多次使用pngnq不会降低质量,我们计划每周在所有上传的媒体上运行这个脚本。

票数 3
EN

Stack Overflow用户

发布于 2012-09-25 02:41:44

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

这是我的代码:

代码语言:javascript
复制
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是从修边拿走的。在Debian上,您需要安装以下软件包:jpegoptim optipng pngcrush advancecomp。或者只需使用其他工具,如smush.py

我还发现了这个项目,它封装了上面的代码,具有gif支持和更好的文件类型识别。

票数 6
EN

Stack Overflow用户

发布于 2012-03-19 23:24:32

我怀疑是否有到jpegoptim的python绑定。我能想到的选择是:

  • 编写您自己的python绑定 (硬)
  • 使用C型 (介质)
  • 只需使用子过程调用可执行文件即可(容易)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9779052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档