質問

写真にいくつか簡単なことを行うだけでよいPythonコードがあります。透かしの切り取り、サイズ変更、オーバーレイです。 PILを使用しましたが、リサンプル/サイズ変更の結果はひどいです。私はimagemagickを使用しました。インターフェースとコマンドは、猫を箱に入れてから、キーボードの階段に繰り返し投げ捨てて設計されました。

単純で高品質の画像変換を行うためにPythonで使用できるPILまたはImagemagickではないものを探しています。さらに言えば、コマンドラインインターフェイスが適切であれば、Pythonバインディングさえ必要ありません。

ああ、それは比較的プラットフォームに依存しない必要があり、私たちの本番サーバーはLinuxですが、開発者の一部はWindowsで開発しています。ライブラリとして使用するために、たくさんの愚かなGUIコードをインストールする必要もありません。

役に立ちましたか?

解決

  

PILを使用しましたが、リサンプル/サイズ変更の結果はひどいです。

あなたがいる限り、そうすべきではありません:

  1. ダウンスケーリング操作にはImage.ANTIALIASフィルタリングのみを使用します
  2. アップスケーリング操作にはImage.BICUBICフィルタリングのみを使用します。
  3. パレット画像を使用している場合、サイズ変更の前に「RGB」カラーモードに変換することを忘れないでください
  4. .thumbnail()を使用しないでください。それはがらくたです
  5. JPEGの保存時に quality = レベルを適切な値に設定します(デフォルトは非常に低いです)

他のヒント

Image.thumbnailがこんなにひどくなっている理由はわかりません。私が実行している現在のリリースでは、目的のサイズを把握し、適切な位置に画像のサイズを変更するだけです。適切なリサンプルフィルターを使用して、最初にRGBに変換する限り(bobinceが言うように)、サムネイルはサイズ変更と何の違いもありません。

サムネイルメソッドの実際のソースは次のとおりです。

def thumbnail(self, size, resample=NEAREST):
  # preserve aspect ratio
  x, y = self.size
  if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
  if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
  size = x, y

  if size == self.size:
      return

  self.draft(None, size)

  self.load()

  try:
      im = self.resize(size, resample)
  except ValueError:
      if resample != ANTIALIAS:
          raise
      im = self.resize(size, NEAREST) # fallback

  self.im = im.im
  self.mode = im.mode
  self.size = size

  self.readonly = 0

PILは適切なサイズ変更を行うことができます。ソース画像がパレット色ではなくRGBモードであることを確認し、さまざまなアルゴリズムを選択してください。

imagemagickは事実上のオープンソースのイメージングライブラリであると思われますが、おそらく DevIL (クロスプラットフォーム、単純な画像操作を行うようです)または FreeImage

pypi をチェックしましたか?大まかな検索では、画像関連のツールがいくつか表示されますが、python-gdも発見されましたが、どれほど便利かはわかりません。

私はPILで問題を抱えたことは一度もありませんが、ある種の多様性は興味深いかもしれません。

GIMPには合理的なコマンドラインインターフェイスがあります。

これらのイメージングライブラリのいくつかを見てください:

hxxp://pypi.python.org/pypi/collective.croppingimagefield/0.1beta

hxxp://pypi.python.org/pypi/cropresize/0.1.1

hxxp://pypi.python.org/pypi/image_resize/1.0

前回比較したところ、このダウンスケーラーの出力は、GIMPの「キュービック」出力とほぼ同じです。オプション:

 import Image

 def stretch(im, size, filter=Image.NEAREST):
     im.load()
     im = im._new(im.im.stretch(size, filter))
     return im

IIRCでは、差異は視覚的に区別できません。一部のピクセル値は丸めのために+/- 1であり、エッジを丸める傾向があります。遅くもない。

cf: http://www.mail-archive .com / image-sig @ python.org / msg00248.html

  

PILを使用しましたが、リサンプル/サイズ変更の結果はひどいです。

PILのサイズ変更はさまざまな方法で中断され、PILは長期間維持されません。 Pillow 2.7 から、ほとんどの問題が修正されました。劇的にパフォーマンスが向上します。 最新の枕を使用していることを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top