Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在简易缩略图中使用jpegoptim和PIL_Python_Django_Png_Jpeg_Gif - Fatal编程技术网

Python 在简易缩略图中使用jpegoptim和PIL

Python 在简易缩略图中使用jpegoptim和PIL,python,django,png,jpeg,gif,Python,Django,Png,Jpeg,Gif,我想处理通过via thru生成的所有JPEG缩略图 使用PIL的优化:image.save(..,optimize=1,…)根本没有进行太多优化 例如: 带PIL:123KB 使用PIL+优化:112KB 使用PIL+optimize+jpegoptim:52KB 有谁能告诉我集成jpegoptim的Python示例或库吗?我怀疑jpegoptim是否有任何Python绑定。我能想到的选择是: (硬的) 使用(中) 只需使用(easy)调用可执行文件 我怀疑jpegoptim是否有任何p

我想处理通过via thru生成的所有JPEG缩略图

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

例如:

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

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

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

  • (硬的)
  • 使用(中)
  • 只需使用(easy)调用可执行文件

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

  • (硬的)
  • 使用(中)
  • 只需使用(easy)调用可执行文件
我发现Python中的无损图像优化程序>=2.7。我使用了一个适用于Python>=2.5的fork,因为我们在服务器上使用debian stable

它使用:

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

我发现它是Python>=2.7中的无损图像优化程序。我使用了一个适用于Python>=2.5的fork,因为我们在服务器上使用debian stable

它使用:


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

您可以使用创建的
缩略图发出信号,并通过
subprecess.Popen
调用外部应用程序。我只是在我的项目中意识到这一点。您甚至可以在上传图像时使用
saved_file
signal

我的代码:

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上,您需要安装以下软件包:
jpegoptimpng pngcrush advancecomp
。或者只使用其他工具,如
smush.py



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

您可以使用创建的
缩略图
发出信号,并通过
subprecess.Popen
调用外部应用程序。我只是在我的项目中意识到这一点。您甚至可以在上传图像时使用
saved_file
signal

我的代码:

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上,您需要安装以下软件包:
jpegoptimpng pngcrush advancecomp
。或者只使用其他工具,如
smush.py



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

您确定jpegoptim没有更改JPEG质量设置吗?在不丢失一些信息的情况下,将尺寸缩小2倍以上是不可能的。我使用的是jpegoptim--剥离所有。从文档中:“从输出文件中删除所有(注释和Exif)标记”您确定jpegoptim没有更改JPEG质量设置吗?在不丢失一些信息的情况下,将尺寸缩小2倍以上是不可能的。我使用的是jpegoptim--剥离所有。从文档中:“从输出文件中删除所有(注释和Exif)标记”