2011-08-09 57 views
1

Makefileの中から(Linuxでは、Makefileは)私は、PNG画像のサイズを小さくしたいです。コマンドラインでPNGを縮小、縮小、縮小する方法は?

私はImageMagickを最初に試しましたが、イメージのサイズを変更して、イメージの色を32(または深さから5ビット)に減らすことができましたが、ほとんどの場合、実際のファイルサイズは元のサイズより大きかったです。結果が類似しているGraphicsMagickので

、時々わずかに良い、時には悪いこと。

[GM]のGimpで-trim -resize 600 -depth 5 -quality 100 output.png

をinput.png変換し、結果は常に完璧です。画像を縮小して色を32に減らした後、結果として得られる画像は常にオリジナルよりもはるかに小さくなります。残念ながら、MakefileからGimpを使うのは少し難しく、lispは分かりませんが、Pythonだけです。

質問: - ImageMagickのかGraphicsMagickのは、PNGのサイズを小さくする方法はありますか? - 代わりにGimpでこの変換を実行する簡単な方法がありますか?Pythonを使用するのが望ましいですか? - このタスクに役立つ無料のツールが他にありますか?

答えて

0

はpngcrushをお試しください:http://pmt.sourceforge.net/pngcrush/

+0

このヒントをありがとう。残念ながら、pngcrushはインデックスカラーを見逃していると思われるので、Gimpで圧縮した画像と比較して、結果の画像はまだ倍の大きさになります。 – Martin

+0

あなたは試みましたか:pngcrush -c 3 image.png? –

+0

はい、しかし、マニュアルページには、「入力ファイルに存在する256色以下がある場合** pngcrushの**将来のバージョンでも、カラータイプ3できるようになります。」と言います私のバージョン1.7.9は最新バージョンではありませんが、変更ログには新機能はありません。 – Martin

0

私は自分の質問に答えます。 1は、バージョン管理システムではなく、任意のローカルコピーからスクリプトを使用するようにMakefile 1で、一時的なGimpのディレクトリを作成して使用する必要があります。 Gimpは起動時に比較的遅いため、画像ファイルをバッチ処理する必要があります。

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) 

このコードは正しくない可能性があり、それだけで基本的な考え方です:

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スクリプトです。