【问题标题】:How to downsize, scale, and colour-reduce PNGs at the command line? (Linux, Makefile)如何在命令行中缩小、缩放和减少 PNG 的大小? (Linux,生成文件)
【发布时间】:2011-10-23 12:13:27
【问题描述】:

我喜欢在 Makefile 中减小 PNG 的大小。

我首先尝试了 ImageMagick,但是虽然我可以调整(缩小)图像的大小并将它们的颜色减少到 32(或深度到 5 位),但在大多数情况下实际文件大小比原始文件大。

使用 GraphicsMagick 的结果相似,有时稍好,有时更差。

[gm] 转换 input.png -trim -resize 600 -depth 5 -quality 100 output.png

使用 Gimp,结果总是完美的。在缩小图像并将颜色减少到 32 后,生成的图像总是比原始图像小得多。不幸的是,使用 Makefile 中的 Gimp 有点困难,而且我不知道 lisp,只知道 Python。

问题: - 有没有办法让 ImageMagick 或 GraphicsMagick 减小 PNG 的大小? - 是否有一种简单的方法可以使用 Gimp 执行这种转换,最好使用 Python? - 是否有其他免费工具可以帮助完成这项任务?

【问题讨论】:

    标签: makefile png imagemagick scale gimp


    【解决方案1】:

    我回答我自己的问题。在Makefile 中,必须创建并使用一个临时 Gimp 目录,以便使用版本控制系统中的脚本,而不是任意的本地副本。应该批量处理图像文件,因为 Gimp 的启动速度相对较慢。

    mkdir -p gimp/plug-ins
    cp downsize.py gimp/plug-ins/
    GIMP2_DIRECTORY=`pwd`/gimp gimp --no-interface \
        --batch '(python-fu-downsize RUN-NONINTERACTIVE 600 32 "origdir" "copydir")' \
        --batch '(gimp-quit 0)'
    

    脚本downsize.py是一个普通的Gimp Python脚本,主要包含如下内容:

    def downsize(img_w, img_d, in_dir, out_dir):
        for fn in glob.glob(os.path.join(in_dir, "*.png")):
            img = pdb.gimp_file_load(fn, '1')
            if img.width > img_w:
                aspect = float(img.width)/float(img.height)
                h = int(float(img_w)/aspect)
                pdb.gimp_image_scale(img, img_w, h) 
                if img.base_type != RGB:
                    pdb.gimp_convert_rgb(img)
                if img.base_type != INDEXED:
                    pdb.gimp_convert_indexed(img, NO_DITHER, MAKE_PALETTE, img_d, False, True, "")
                new_path = os.path.join(out_dir, os.path.basename(fn))
                pdb.gimp_file_save(img, pdb.gimp_image_active_drawable(img), new_path, fn)
    

    这段代码可能不正确,只是基本思路。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 感谢您的提示。不幸的是,pngcrush 似乎错过了索引颜色,因此与使用 Gimp 压缩的图像相比,生成的图像仍然是两倍大。
      • 是的,但手册页说“如果输入文件中存在 256 种或更少的颜色,则 pngcrush 的未来版本也将允许颜色类型 3。”我的 1.7.9 版本不是最新版本,但是更新日志没有提到任何新功能。
      猜你喜欢
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多