Python PIL - 保存到mimetype“image / jpeg”,而不是“image / pjpeg”

时间:2013-01-08 19:35:30

标签: python jpeg python-imaging-library tweepy

我目前正在与Tweepy合作尝试更新个人资料照片。 Tweepy支持多达三种不同的mimetype格式,' image / gif ',' image / jpeg ',' image / png '。

使用PIL,我正在尝试将图像转换为'image / jpeg',但每次我尝试使用PIL转换图像时,它都会显示为'image / pjpeg '代替。我已经尝试将pjpeg添加到Tweepy上的允许列表中,但它不明白如何处理它。

如何将带有PIL的图像转换为'image / jpeg',而不是'image / pjpeg' mimetype?

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")

1 个答案:

答案 0 :(得分:1)

我猜你是在Windows上。

从挖掘mimetypes代码开始,我发现第一次在模块中调用任何东西时,它会运行mimetypes.init(),它会设置可用的mime类型。在Windows上,默认情况下这些是从注册表中加载的,至少在我的机器上,它有'image / pjpeg',jpegs的IE mimetype,注册以及'image / jpeg',其他人都使用的mimetype。由于mimetypes将mimetypes存储为dict并将注册表mimetypes加载为strict版本,因此无法避免mimetype被覆盖,事实上,因为我不认为检索注册表的顺序值以任何方式定义,它使这在Windows上不确定,因为注册表为扩展定义了2个mimetypes。我认为没有办法做任何不丑陋和丑陋的事情,但在我看来,你应该能够用这个让事情适合你:

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()