2012-03-12 13 views
2

私は、PythonのPILの優れた変更をEtienne from hereで使用しています。私が必要とするのは、元のJPEGファイルと同じ量子化テーブルを使用してJPEGファイルを保存することです。その変更を行うことは、エレガントに思えます。私は現在、Cコードを使用してこれを達成しています。クロップ時にPILにイメージタイプ情報を保存する

私の問題は、PILでJPEGファイルオブジェクトを取得することですが、変更後は他のタイプのオブジェクトになります。私が欲しいのは、イメージを取り、それを切り取り、同じ量子化テーブルで保存することです。

私が試してみてください。

img = Image.open("someimage.jpg") 
width, height = img.size 
crop = img.crop((8, 0, width, height)) 
img = img.resize((width - 8, height)) 
img.paste(crop, (0,0)) 
img.save("crop.jpg", quality='keep') 

IMGオブジェクトが最初PIL.JpegImagePlugin.JpegImageFileですが、リサイズ/ペースト操作の後にちょうど画像となります。したがって、私はquality = 'keep'を使用することができません。これはもはやJPEGではありません。私は上記のようにクロッピングと貼り付けを試みましたが、いくつかの方法を試しましたが、何もJpegImageFileオブジェクトを保持していないようです。

答えて

2

あなたは私はあなたがいると思うthis fork by Etienneを、使用している場合は、このような何かを行うことができるはず:

img = Image.open("someimage.jpg") 
qt = img.quantization 
# qt is now a dictionary of arrays which is your quantization table. 

width, height = img.size 
crop = img.crop((8, 0, width, height)) 
img = img.resize((width - 8, height)) 
img.paste(crop, (0,0)) 

# pass qt in as you save your jpeg 
img.save("crop.jpg", qtables = qt) 

は、詳細はthis documentation by Etienneを参照してください。

+0

ああ、私はばかげたことに、.pyファイル内でドキュメントをチェックすることを想像しませんでした。これはマイナーチェンジで動作します.qtables引数に 'qt'だけでなく、' enumerate(qt) 'を与えなければなりません。 – DUman

+0

また、サブサンプリングと量子化テーブルの両方を使用して、フォークのJpegPresets.pyファイルに示されているように、プリセット全体を作成すると便利です。ありがとう! – DUman

関連する問題