0

我目前正在与 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")
4

1 回答 1

1

我猜你在Windows上。

通过挖掘mimetypes代码,我发现第一次调用模块中的任何内容时,它都会运行mimetypes.init(),它会设置可用的 mime 类型。在 Windows 上,这些默认情况下从注册表中加载,至少在我的机器上,注册了“image/pjpeg”,即 jpeg 的 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()
于 2013-01-08T21:27:02.453 回答