【问题标题】:Python PIL - Save to mimetype "image/jpeg", not "image/pjpeg"Python PIL - 保存到 mimetype “image/jpeg”,而不是“image/pjpeg”
【发布时间】:2013-01-09 05:27:02
【问题描述】:

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

【问题讨论】:

标签: python jpeg python-imaging-library tweepy


【解决方案1】:

我猜你是在 Windows 上。

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

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

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多