2

私は、ファイルパスと出力ファイルパスを取り込んで、ファイルパスで見つかった画像の64x64サムネイルを作成し、そのサムネイルをoutputfilepathに保存できるPythonで単純な関数を作成しようとしています。これが私のコード全体です:

def create_thumbnail2(filepath, outputpath):
    if not os.path.exists(filepath):
        print "Input file path for create_thumbnail doesn't exist. Returning None"
        return None

    try:
        size = 64, 64 #Will be making a 64x64 thumbnail                                                                                           
        im = Image.open(filepath)
        print "image successfully opened"
        im.thumbnail(size, Image.ANTIALIAS)
        print "made thumbnail"
        im.save(outputpath, "PNG") #Save image as a PNG                                                                                           
        return outputpath
    except IOError:
        print "I/O error"
        return None

print "TEST 1"
filep = "test_images/cat1.jpg"
print create_thumbnail2(filep, "test_images/cat1_thumbnail.png")

print "\nTEST 2"
filep = "test_images/cat2.jpg"
print create_thumbnail2(filep, "test_images/cat2_thumbnail.png")

問題は、このコードが一部の画像では正常に機能することですが、「im.thumbnail(size、Image.ANTIALIAS)」を呼び出す行でIOErrorが発生します。上記のプログラムの出力は次のとおりです。

TEST 1
image successfully opened
I/O error
None

TEST 2
image successfully opened
made thumbnail
test_images/cat2_thumbnail.png

最初のテストでは、画像を開いた後、サムネイルが作成される前にI/Oエラーがスローされることに気付くでしょう。2番目のテストでは、エラーはスローされず、サムネイルは実際に出力パスに正常に保存されます。2つの異なるテストをどのような順序で呼び出すか、または一方をコメントアウトしてもう一方を単独で実行すると、結果は常にTEST 1が失敗し、TEST2が成功します。cat1.jpgとcat2.jpgはどちらも有効なJPEG画像のようですが、ファイル名と実際の画像の内容以外に、実際には何も違いはありません。

誰かが私の画像でそれを試してみたい場合は、ここからcat1をダウンロードしました:http://dellone2one.com/wp-content/uploads/2009/11/angry_wet_cat.jpg

そして私はここからcat2をダウンロードしました:http://cvcl.mit.edu/hybrid/cat2.jpg

処理せずに完全なトレースバックを追加するように編集:これが完全なトレースバックです

Traceback (most recent call last):
  File "image_utils.py", line 75, in <module>
    print create_thumbnail2(filep, "test_images/cat1_thumbnail.png")
  File "image_utils.py", line 66, in create_thumbnail2
    im.thumbnail(size, Image.ANTIALIAS)
  File "/Users/dylan/arcode/python/arcode/PIL/Image.py", line 1559, in thumbnail
    self.load()
  File "/Users/dylan/arcode/python/arcode/PIL/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/Users/dylan/arcode/python/arcode/PIL/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
4

1 に答える 1

1

私の PIL のインストールも同じです。(PIL 1.1.7、Py 2.6、OSX 10.6)

編集:ああ-別のOSXマシンへのインストールは機能します。OSX で JPG をサポートする PIL をビルドする際に問題があることは知っていますが、2 つのインストールのそれぞれのソースが何であったか思い出せないため、修正方法を教えることはできません。

編集 2: 私の最高の記憶は、ここの指示のようなもので PIL を構築すると、機能するインストールが得られたことです。ビルドおよびインストール コマンドは sudo で実行する必要があり、gcc の 3 回の呼び出しを手動で変更して「-arch ppc」オプションを削除して再実行する必要がありました。

そして、ここに PIL を構築するための別のルートがあります。

于 2011-06-15T23:59:59.920 に答える