0

現在、Tweepy を使用してプロフィール写真を更新しようとしています。Tweepy は、最大 3 つの異なる MIME タイプ形式、' image/gif '、' image/jpeg '、' image/png ' をサポートしています。

PIL を使用して、画像を'image/jpeg'に変換しようとしていますが、PIL を使用して画像を変換しようとするたびに、代わりに'image/pjpeg'として出力されます。Tweepy の許可リストに pjpeg を追加しようとしましたが、処理方法がわかりません。

PIL の画像を「image/pjpeg」ではなく「 image/jpeg」に変換するにはどうすればよいですか?

from PIL import Image
import mimetypes

pic = Image.open(rootDir + "pic.png")
pic = pic.convert("RGB")
pic.save(rootDir + "new.jpg", 'jpeg', progressive=False)

print mimetypes.guess_type(rootDir + "new.jpg")
4

1 に答える 1

1

あなたはWindowsを使っていると思います。

コードを掘り下げてmimetypesみると、モジュール内のほとんどすべてのものを初めて呼び出すと、実行mimetypes.init()され、使用可能なmimeタイプが設定されることがわかりました。Windowsでは、これらはデフォルトでレジストリからロードされます。少なくとも私のマシンでは、jpegのIEmimetypeである「image/pjpeg」と、他のすべての人が使用するmimetypeである「image/jpeg」が登録されています。mimetypesmimetypesをdictとして保存し、レジストリmimetypesをとしてロードするのでstrictバージョンでは、mimetypeが上書きされるのを回避する方法はありません。実際、レジストリ値を取得する順序が定義されているとは思わないため、レジストリが拡張機能に対して2つのmimetypeを定義しているため、Windowsではこれが不確定になります。醜くてハッキーではないこれを行う方法はわかりませんが、これで物事をうまく機能させることができるはずです:

import mimetypes

# alternatively, you could just call this with
# files=file_path_list of mimetype files that you create
mimetypes.init()
mimetypes._default_mime_types()
mimetypes._db = mimetypes.MimeTypes()
于 2013-01-08T21:27:02.453 に答える