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