17

在使用下载器时,我在 Python 的mimetypes.guess_extension函数中遇到了以下问题:

In [2]: mimetypes.guess_extension('image/jpeg', strict=False)
Out[2]: '.jpe'

我知道jpegjpg是有效的 JPEG 扩展,但我不知道jpe。所以查看维基百科网站确实揭示了以下内容:

使用 JPEG 压缩的文件最常见的文件扩展名是 .jpg 和 .jpeg,但也使用 .jpe、.jfif 和 .jif

更多我不知道的扩展。

所以主要的问题是:为什么 JPEG 有这么多(有效的)与之相关的扩展?

在相关说明中,我想知道为什么 Python 确实返回 'jpe' 而不是 'jpg' 或 'jpeg',因为我看到这些使用最多。

4

2 回答 2

13

它似乎mimetypes.guess_extension返回所有可能的扩展中的第一个:

def guess_extension(self, type, strict=True):
    # ...
    extensions = self.guess_all_extensions(type, strict)
    if not extensions:
        return None
    return extensions[0]

所以你会得到返回的列表中的第一个mimetypes.guess_all_extensions,结果是:

>>> mimetypes.guess_all_extensions('image/jpeg', strict=False)
['.jpe', '.jpg', '.jpeg']

我对为什么.jpe也是有效的猜测:

在 DOS 和早期 Windows 版本中,文件名只能有 8 个字符和 3 个字符作为扩展名(有关更多信息,请参阅 Wikipedia 上的文章8.3 文件名)。可能是他们将 JPEG 缩写为 .JPE 或 .jpe - 这就是我们现在拥有 .jpe、.jpeg 和 .jpg 的原因。

确实,.jpeg 和 .jpg 更常见。

于 2012-07-09T13:44:15.133 回答
2

严格意义上来说,jpeg 是一种图像压缩算法,而不是一种文件格式。

JFIF (JPEG File Interchange Format) is the usual file format that uses jpeg compression. EXIF (Exchangeable image file format) is another format using jpeg, used in digital camera. Most people tend to think those format are the same, but that's not the case.

TIFF can also be jpeg encoded.

于 2012-07-09T13:47:46.797 回答