尽管对于读者来说,图像只是图像,但不同的图像格式必须通过转换器以不同的方式处理,才能被输出格式引用或嵌入。某些图像格式,如SVG,甚至会激活额外的行为。在本页上,你将学习AsciiDoc处理器如何确定图像的格式,以及如果无法确定格式,如何使用`format`属性显式指定格式。

自动图像格式

大多数情况下,可以通过目标的文件扩展名(例如,.svg)来确定图像格式。这是一个示例,展示了一个带有文件扩展名的图像目标:

image::avatar.svg[]

在这种情况下,转换器可以根据文件扩展名`.svg`确定这是一个SVG图像。因此,作者无需指定图像格式。只有当无法确定图像格式时,作者才需要指定格式。

格式属性

当文件扩展名不存在,或者在URL的情况下不在其常规位置时,作者必须明确指定图像格式。块或行内图像宏上的`format`属性可以用来指定图像的格式。

image::https://example.org/avatar[format=svg]

在这种情况下,由于目标没有文件扩展名,转换器将无法确定这是一个SVG图像。但是因为作者已经指定了 format=svg,转换器可以识别它为一个SVG图像。

以下是几种无法自动确定图像格式的情况:

  • 目标文件没有文件扩展名。

  • 目标使用了未被识别的文件扩展名。

  • 目标是一个含有查询字符串的URL(这样隐藏了文件扩展名)。

格式属性的值是子MIME类型(正斜杠之后的部分),例如,对于PNG图像是`png`。这个规则的一个例外是SVG的格式,它被指定为`svg`而不是`svg+xml`。你可以在https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types[image file type and format guide^]页面上找到常见图像格式及其MIME类型值的列表。

使用这个格式是在什么时候?

有几种情况下,转换器几乎总是需要知道图像格式。一种情况是为了区分SVG目标。另一种情况是将图像转换为数据URI。还有一种情况是转换器必须重新编码图像。

AsciiDoc识别SVG图像的额外设置,例如如何在HTML输出中包含它以及是否提供回退图像。如果转换器需要读取并处理文件,它通常必须使用不同的库来处理SVG,因为SVG的内容是一个XML文档。因此,对几乎任何转换器来说,能够识别SVG目标是至关重要的。

如果文档设置了 data-uri 属性,AsciiDoc 处理器必须将图片转换为数据URI。首先,SVG的数据URI与其他格式的数据URI不同。但即便在为非SVG创建一个数据URI时,也必须在数据URI中包含该图片的MIME类型,在这种情况下必须知道图片的格式。

某些转换器,例如PDF转换器,必须重新编码图像数据。这意味着转换器必须解析图像数据,可能需要加载额外的库。进行这种处理几乎肯定需要了解图像的格式。这也为转换器提供了一个机会,以通知作者图像是否使用了无法处理的格式。

正如您所见,虽然并不总是需要图像格式,但往往需要指定格式,尤其是当从目标文件的扩展名中无法明显看出格式时,您应该指定图像的格式。