Ste*_*ney 1 python django png jpeg gif
我想通过PIL到jpegoptim来处理所有使用easy-thumbnail生成的JPEG缩略图.
使用PIL的优化:image.save(..,optimize=1,...)根本没有优化.
例如:
任何人都可以指向我集成jpegoptim的Python示例或库吗?
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
runString取自trimage.在Debian上,您需要安装以下软件包:jpegoptim optipng pngcrush advancecomp.或者只是使用其他工具,例如smush.py.
我还发现这个封装上面代码的项目,有gif支持和更好的文件类型识别.