为什么有多种JPEG扩展?

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',因为我看到后者被广泛使用。

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个字符的扩展名(请参阅维基百科上的8.3 filename文章了解更多信息)。 可能他们将JPEG缩写为 .JPE 或 .jpe - 这就是为什么我们现在有 .jpe、.jpeg 和 .jpg 的原因。

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


2

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

JFIF(JPEG文件交换格式)是通常使用JPEG压缩的文件格式。EXIF(可交换图像文件格式)是另一种使用JPEG的格式,用于数字相机。大多数人倾向于认为这些格式是相同的,但事实并非如此。

TIFF也可以使用JPEG编码。


7
这份信息虽然属实,但根本没有回答问题。 - Joachim Sauer
请问为什么要使用几个扩展名,包括“.jfif”,因此我解释了jfif以及与jpeg相比的含义。 - MatthieuW
8.3 DOS 的限制可能可以解释 ".jpe",但这只是问题的一部分。 - MatthieuW
好的,所以答案部分相关,但是有一些无关信息被压缩在其中(EXIF在这里并不真正相关),而且与具体的Python问题的联系也缺失了。也许我反应过度了,但再说一遍:这只是一个负投票;-) - Joachim Sauer
这只是根据原问题的“主要问题”。我认为我需要使用退出和tiff示例来解释jfif不是唯一的jpeg编码文件格式。这只是对一个有效答案的负面评价。 - MatthieuW
谢谢你的回答。让我更清楚地了解了MIME类型和扩展名之间的关系!然而,这并不是我正在寻找的“确切”答案。但还是谢谢 :) - Luis Nell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接