2

在 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?- 是否有其他免费工具可以帮助完成这项任务?

4

2 回答 2

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)

此代码可能不正确,这只是基本思想。

于 2011-08-11T15:47:20.120 回答
0

试试 pngcrush:http://pmt.sourceforge.net/pngcrush/

于 2011-08-09T19:46:23.203 回答