翻译者:宋杰 IIIF中国推广大使
原文链接:https://iiif.io/api/image/3.0
image.png

文档状态

版本: 3.0.0
最新稳定版: 3.0.0
前版: 2.1.1
编辑:

版权所有©2012-2021编辑和贡献者。由IIIF联盟根据CC-BY许可证发布,见免责声明


目录

请将反馈发送给iiif-discuss@googlegroups.com.

1.1. 受众和范围

本文档面向构建共享和使用数字图像的应用程序的架构师和开发人员,特别是来自文化遗产机构、博物馆、图书馆和档案馆的应用程序。目标应用包括:

  • 数字图像存储库和分布式内容网络。
  • 以图像为中心的web应用程序,如平移/缩放查看器、图书阅读器等。
  • 使用图像内容进行分析或比较的客户端应用程序。

此规范涉及客户端的图像请求,但不涉及服务器对图像的管理。它涵盖了如何响应遵循特定URI语法的请求,但不链接涵盖实现方法,如旋转算法、转码、色彩管理、压缩,或如何响应不符合指定语法的URI。这允许在具有特定约束或特定社区实践的领域中灵活实施,同时支持一般情况下的互操作性。

实现可以使用一组预先生成的文件作为静态web资源,并且仍然可以实现丰富的用户体验。动态图像服务器实现可以提供超出基本兼容性级别的附加功能。

1.2. 术语

术语基础图像内容用于指代源图像数据。未对其格式或结构进行任何假设。它可能来自一个或多个源图像,但也可以动态生成。
术语完整图像用于指基础图像内容的整个区域,其像素尺寸在图像信息文档中给出,并且被想象为图像请求的起点。
本文件中的关键词必须(must)、禁止(must not)、必须(required)、推荐(shall)、禁止(shall not)、推荐(should)、禁止(should not)、推荐(recommended)和可选(optional)应按照RFC2119中的说明进行解释。

2. URI 语法

IIIF图像API可以通过两种方式调用:

  • 请求从基础图像内容派生的图像。
  • 请求有关映像服务的信息,包括特征、可用函数和相关服务。

两者都在URI的路径段中传递请求的信息,而不是作为查询参数。这使得响应更容易缓存,无论是在服务器上还是通过标准的web缓存基础设施。它还允许在匹配的目录结构中使用预先切割的文件进行最小限度的图像服务器实现。
请求和其他IIIF规范共有四个参数:

名称 描述
协议(scheme) 协议表示在调用服务时使用HTTP或HTTPS协议。
服务器(server) 服务器服务所在的主机服务器。该参数还可以包括端口号。
前缀(prefix) 将主机服务器上的路径作为服务的前缀。此前缀是可选的,但在主机服务器支持多个服务时可能很有用。前缀推荐包含多个由斜杠分隔的路径段,但必须对所有其他特殊字符进行编码。请参阅URI编码和解码
标识符(identifier) 所请求图像的标识符。这可能是ARK、URN、文件名或其他标识符。特殊字符必须是URI编码的。

这些参数的组合形成图像服务的基本URI,并标识基础图像内容。它是根据以下URI模板(RFC6570)构建的:

  1. {scheme}://{server}{/prefix}/{identifier}

当对基本URI进行解析时,交互推荐产生图像信息文档。推荐响应为303状态重定向到图像信息文档的URI。在响应HTTP请求头和方法时,图像服务器实现还推荐表现出超出本规范范围的基本URI的其他行为。
为了允许扩展,当服务器接收到与基本URI或下面描述的URI语法之一不匹配的请求时,此规范不定义服务器行为。

2.1. 图像请求URI语法

用于请求图像的IIIF图像API URI必须符合以下URI模板:

  1. {scheme}://{server}{/prefix}/{identifier}/{region}/{size}/{rotation}/{quality}

例如:

  1. https://example.org/image-service/abcd1234/full/max/0/default.jpg

图像请求URI的参数包括区域、大小、旋转、色质和格式,这些参数定义了返回图像的特征。这些将在图像请求中详细描述。

2.2. 图像信息请求URI语法

用于请求图像信息的URI必须符合以下URI模板:

  1. {scheme}://{server}{/prefix}/{identifier}/info.json

例如:

  1. https://example.org/image-service/abcd1234/info.json

对于图像信息文档描述的图像内容,信息请求的协议、服务器、前缀和标识符组件必须与上述图像请求的协议、服务器、前缀和标识符组件相同。在图像信息部分中详细描述图像信息文档。

3. 标识符

API对服务器可能使用或支持的标识符的形式没有任何限制。所有特殊字符(例如?或#)都必须进行URI编码,以避免不可预知的客户端行为。URI语法依赖于斜杠(/)分隔符,因此标识符中的任何斜杠都必须进行URI编码(也称为“百分比编码”)。请参阅URI编码和解码中的附加讨论。

4. 图像请求

以下描述的所有参数都是IIIF图像API URI的兼容构造所必需的。URI中的参数顺序必须如下所述。参数的顺序还可以作为服务操作图像内容的操作顺序的助记符。因此,首先将请求的图像内容提取为完整图像的区域,然后缩放到请求的大小,镜像和/或旋转,最后转换为请求的颜色色质和格式。这个结果图像作为URI的表示返回。
像素中的大小和区域参数必须是非负整数。以百分比表示的大小和区域参数以及旋转参数必须是正浮点数或整数。有关IIIF URI中浮点数表示形式的详细信息,请参阅浮点值部分。
服务器推荐在图像响应上支持CORS

4.1. 区域

region参数定义要返回的基础图像内容的矩形部分。区域可以通过像素坐标、百分比或full值指定,full值指定应返回完整图像。

形式 描述
full full返回完整图像,不进行任何裁剪。
square 正方形区域定义为宽度和高度均等于完整图像较短尺寸长度的区域。区域可以由服务器自行决定定位在完整图像较长维度的任何位置,居中通常是合理的默认设置。
x,y,w,h 根据绝对像素值指定要返回的完整图像的区域。x的值表示水平轴上0位置的像素数。y的值表示从垂直轴上的0位置开始的像素数。因此,x,y位置0,0是图像的最左上像素。w表示区域的宽度,h表示区域的高度(以像素为单位)。
pct:x,y,w,h 要返回的区域指定为完整图像尺寸的百分比序列,如图像信息文档中所述。因此,x表示水平轴上从0位置开始的像素数,计算为报告宽度的百分比。w表示区域的宽度,也以报告宽度的百分比计算。这同样适用于y和h。

如果请求指定的区域超出了图像信息文档中报告的完整图像的尺寸,则服务推荐返回在图像边缘裁剪的图像,而不是添加空白。
如果请求的区域的高度或宽度为零,或者如果该区域完全超出报告的维度边界,则服务器推荐返回400(错误请求)状态代码。

例如:

image.png
1 region=full
…/full/max/0/default.jpg
image.png
2 region=square
…/square/max/0/default.jpg
image.png
3 region=88,12,150,160
…/88,12,150,160/max/0/default.jpg
image.png
4 region=pct:29.3,6,50,80
…/pct:29.3,6,50,80/max/0/default.jpg
image.png
5 region=88,12,220,200
…/88,12,220,200/max/0/default.jpg
返回的图像尺寸 212,188 px
image.png
6 region=pct:29.3,6,73.3,100
…/pct:29.3,6,73.3,100/max/0/default.jpg
返回的图像尺寸 212,188 px

4.2. 尺寸

size参数指定提取区域(可能是完整图像)要缩放到的尺寸。除了w,h和^w,h形式外,返回的图像尽可能保持提取区域的纵横比。当提取区域的像素尺寸小于缩放区域的像素尺寸时,以“^”为前缀的大小允许放大提取区域的尺寸。

形式 描述
max 提取区域以可用的最大大小返回,但不会放大。生成的图像将具有提取区域的像素尺寸,除非根据技术属性一节中定义的maxWidth、maxHeight或maxArea将其约束为较小的尺寸。
^max 提取区域按技术属性一节中定义的maxWidth、maxHeight或maxArea允许的最大大小缩放节。如果结果尺寸大于提取区域的像素宽度和高度,则提取区域将放大。
w, 提取的区域应缩放,以便返回图像的宽度正好等于w。w的值禁止大于提取区域的宽度。
^w, 提取的区域应缩放,以便返回图像的宽度正好等于w。如果w大于所提取区域的像素宽度,则所提取区域被放大。
,h 应缩放提取区域,以便返回图像的高度正好等于h。h的值禁止大于提取区域的高度。
^,h 应缩放提取区域,以便返回图像的高度正好等于h。如果h大于所提取区域的像素高度,则所提取区域被放大。
pct:n 返回图像的宽度和高度缩放为提取区域宽度和高度的n%。n的值禁止大于100。
^pct:n 返回图像的宽度和高度缩放为提取区域宽度和高度的n%。对于大于100的n值,提取的区域将放大。
w,h 返回图像的宽度和高度正好是w和h。返回图像的纵横比推荐与提取区域显著不同,从而导致图像失真。w和h的值禁止大于提取区域的相应像素尺寸。
^w,h 返回图像的宽度和高度正好是w和h。返回图像的纵横比可选与提取区域显著不同,从而导致图像失真。如果w和/或h大于提取区域的对应像素尺寸,则提取区域被放大
!w,h 对提取的区域进行缩放,以使返回图像的宽度和高度不大于w和h,同时保持纵横比。返回的图像必须尽可能大,但不能大于提取区域,w或h,或服务器施加的限制。
^!w,h 对提取的区域进行缩放,以使返回图像的宽度和高度不大于w和h,同时保持纵横比。返回的图像必须尽可能大,但不能大于w、h或服务器施加的限制。

对于未加前缀“^”的大小的请求,如果导致缩放区域的像素尺寸大于提取区域的像素尺寸,则推荐抛出错误,并将导致400(错误请求)状态代码。
如果服务器不支持图片放大,则需要放大前缀为^的大小的请求推荐产生501(未实现)状态代码,而响应其他客户端请求语法错误时,推荐返回400(错误请求)状态代码。例如,如果服务器不支持升级,则大小为^pct:120的请求应产生501状态代码。
对于所有请求,缩放区域的像素尺寸禁止小于1像素或大于服务器施加的限制。生成这些大小图像的请求是错误,推荐导致400(错误请求)状态代码。

例如:

image.png
1 size=max
…/full/max/0/default.jpg
假设图像的maxWidth是200px
image.png
1 size=^max
…/full/^max/0/default.jpg
假设图像的maxWidth是360px
image.png
2 size=150,
…/full/150,/0/default.jpg
image.png
2 size=^360,
…/full/^360,/0/default.jpg
image.png
3 size=,150
…/full/,150/0/default.jpg
image.png
3 size=,^240
…/full/,^240/0/default.jpg
image.png
4 size=pct:50
…/full/pct:50/0/default.jpg
image.png
4 size=pct:120
…/full/pct:120/0/default.jpg
image.png
5 size=225,100
…/full/225,100/0/default.jpg
image.png
5 size=^360,360
…/full/^360,360/0/default.jpg
image.png
6 size=!225,100
…/full/!225,100/0/default.jpg
返回的图像尺寸150,100 px
image.png
6 size=^!360,360
…/full/^!360,360/0/default.jpg
返回的图像尺寸360,240 px

4.3. 旋转

旋转参数指定镜像和旋转。前导感叹号(!)表示在应用任何旋转之前,应通过垂直轴上的反射来镜像图像。数值表示顺时针旋转的度数,可以是0到360之间的任意浮点数。

形式 描述
n 从0到360顺时针旋转的角度。
!n 图像应先镜像,然后如上所述旋转。

超出范围或不受支持的旋转值推荐抛出400(错误请求)状态代码。

在大多数情况下,旋转将更改返回图像的宽度和高度尺寸。服务推荐返回包含区域和大小参数中请求的所有图像内容的图像,即使返回的图像文件的尺寸不同于大小参数中指定的尺寸。图像内容禁止因旋转而缩放,且旋转图像内容的顶点和返回图像的边界框之间不应存在额外的空间。

对于不是90度倍数的旋转,推荐客户端以支持透明度的格式(如png)请求图像,并且服务器返回具有透明背景的图像。API中没有任何附加功能可供客户端请求特定的背景颜色或其他填充图案。

例如:

image.png
1 rotation=0
…/full/max/0/default.jpg
image.png
2 rotation=180
…/full/max/180/default.jpg
image.png
3 rotation=90
…/full/max/90/default.jpg
image.png
4 rotation=22.5
…/full/max/22.5/default.png
image.png
5 rotation=!0
…/full/max/!0/default.jpg
image.png
6 rotation=!180
…/full/max/!180/default.jpg

4.4. 色质

色质参数确定图像是以彩色、灰度还是黑白显示。(译者注:色质决定返回的通道数)

色质 返回参数
彩色(color) 返回图像及其所有颜色信息。
灰度(gray) 图像以灰度返回,其中每个像素为黑色、白色或介于两者之间的任何灰度。
二值(bitonal) 返回的图像为二值,其中每个像素为黑色或白色。
默认(default) 使用服务器对图像的默认色质(例如彩色color、灰色gray或双色bitonal)返回图像。

默认(default)色质用于支持符合级别0的实现,这些实现可能不知道其集合中单个图像的色质。这为客户端提供了一种便利,客户端知道除色质(例如以…./full/120,80/90/{quality}.png方式请求缩略图)之外的请求的所有其他参数的值,因而可以避免仅用于确定哪些色质可用的图像信息预请求。(译者注:也就是说在实现级别0时,可以不实现图像信息请求)
无论合规性级别如何,使默认以外的附加色质可用的服务必须在图像信息请求响应的extraQualitiesproperty中列出这些色质。对色质值不受支持的图像的请求推荐返回400(错误请求)状态代码。
对图像的彩色(color)色质的请求必须返回图像。此图像可能仅由灰度或二值像素组成,如果这是服务器可用的所有颜色信息。在这种情况下,服务器不应该在extraQualities列表中包含彩色(color),但(如果extraQualities中包含了彩色color)对彩色(color)色质的请求也禁止导致错误。类似地,对灰度色质的请求可以返回仅由二值像素组成的图像。(译者注:色质向下兼容,彩色兼容灰度,灰度兼容二值)
例如:

image.png
1 quality=default
…/full/max/0/default.jpg
image.png
2 quality=color
…/full/max/0/color.jpg
image.png
3 quality=gray
…/full/max/0/gray.jpg
image.png
4 quality=bitonal
…/full/max/0/bitonal.jpg

4.5. 格式

返回图像的格式表示为URI末尾的后缀,类似通用文件扩展名。

后缀 MIME类型
jpg image/jpeg
tif image/tiff
png image/png
gif image/gif
jp2 image/jp2
pdf application/pdf
webp image/webp

不支持的格式值推荐导致400(错误请求)状态代码。
例如:

  1. …/full/max/0/default.jpg
  2. …/full/max/0/default.png
  3. …/full/max/0/default.tif

    4.6. 执行顺序

    URI中的参数序列旨在作为对底层图像内容进行图像操作的顺序的助记符。在实现图像服务时考虑这一点很重要,因为在不同的序列中应用相同的参数通常会导致不同的图像被传递。
    应将参数解释为图像操作顺序为:
    区域、大小、旋转、色质、格式
    如果旋转参数包括镜像(!),则在旋转之前应用镜像。
image.png
1 region=88,12,150,160 size=75, rotation=!345 quality=gray
…/88,12,150,160/75,/!345/gray.jpg

4.7. 浮点值

以百分比形式给出的大小和区域参数以及旋转参数允许正浮点数值。如果可能,推荐使用整数值。使用浮点值时,它们必须仅由十进制数字和“.”组成(例如,0.9不是+0.9),如果小于1,则推荐以前导0表示(例如,0.9不是.9),并且禁止包括尾随零(例如,0.9不是0.90)。中间计算可以使用浮点数,舍入方法是特定于实现的。

4.8. 规范URI语法

可以使用不同的参数组合请求相同的图像。虽然客户机能够以方便的形式表达其请求很有用,但需要规范URI语法的原因有几个:

  • 它支持基于文件系统的静态实现,只有一个URI可以提供内容。
  • 当系统和会话之间使用的URI相同时,客户端和服务器端的缓存都会显著提高效率。
  • 通过直接使用规范形式,避免从请求的非规范URI语法重定向到规范语法,可以缩短响应时间。

为了支持上述要求,客户端推荐尽可能使用以下规范参数值构造映像请求URI。图像服务器可选会将客户端从非规范的等价物重定向到规范URI。

参数 规范值
区域(region) full 如果请求完整映像,
否则,使用x,y,w,h语法。
尺寸(size) max 如果请求最大尺寸而不增大尺寸,
^max 如果请求最大放大尺寸,否则
w,h 如果要求的尺寸不需要放大,或
^w,h 如果请求需要对提取的区域进行放大。
旋转(rotation) ! 如果镜像图像,可能的话后跟一个整数,否则为浮点值节建议表示的浮点值。
色质(quality) default 如果请求服务器的默认色质,
否则,使用色质字符串。
格式(format) 始终需要显式格式字符串。

当客户端请求图像时,服务器可选向响应添加一个链接头,该链接头指示该请求的规范URI:
Link:http://iiif.example.com/server/full/400,300/0/default.jpg;rel=”canonical”
服务器也可选在图像信息响应中包含此链接头,但是它是不必要的,因为它包含在检索到的JSON表示中。

4.9. 扩展

IIIF图像API可以通过为区域尺寸旋转参数添加新的参数模式,或者为色质格式参数添加新的值,在图像请求URI语法中进行扩展。超出现有参数范围的请求信息可以作为查询参数传递给图像服务器。图像信息文档应该按照“附加功能”部分中的指南描述扩展功能。

5. 图像信息

服务器必须支持图像信息请求。响应是一个JSON文档,其中包含有关完整图像的技术属性。它还可能包含与图像相关的权限信息和服务。

5.1. 图像信息请求

对图像信息的请求必须符合URI模板:

  1. {scheme}://{server}{/prefix}/{identifier}/info.json

响应的语法是JSON-LD。如果服务器接收到带有Accept标头的请求,它推荐按照内容协商规则进行响应。请注意,请求的Accept标头中提供的内容类型可选包括参数,例如profile或charset。
如果请求不包含Accept标头,则响应的HTTP内容类型标头的值推荐为application/ld+json(json-ld),profile参数作为上下文文档给出:http://iiif.io/api/image/3/context.json。

  1. Content-Type: application/ld+json:profile="http://iiif.io/api/image/3/context.json"

如果由于服务器配置详细信息而无法生成Content-Type为application/ld+json的标头,那么Content-Type标头推荐是application/json(常规json),而不带profile参数。

  1. Content-Type: application/json

服务器应支持CORS方式的图像信息响应。

5.2. 技术属性

JSON响应有几个技术属性,描述了图像内容的可用功能。

属性 必须? 描述
@context 必须 @context属性推荐作为JSON表示的第一个键值对出现。它的值必须是URI或http://iiif.io/api/image/3/context.json 或具有URI的JSON数组http://iiif.io/api/image/3/context.json 作为最后一项。@context告诉关联数据处理器如何解释图像信息。如果使用了扩展,那么它们的上下文定义推荐包含在这个顶级@context属性中。
id 必须 URI语法中定义的映像的基本URI,包括协议、服务器、前缀和标识符,不带尾随斜杠。
type 必须 图像API的类型。该值必须是字符串ImageService3。
protocol 必须 URI http://iiif.io/api/image 可用于确定文档描述的图像服务是IIIF图像API的一个版本。
profile 必须 表示符合级别的字符串,并由该服务完全支持。该值必须是level0、level1或level2中的一个。
width 必须 完整图像的宽度(以像素为单位),以整数形式给出。
height 必须 完整图像的高度(以像素为单位),以整数形式给出。
maxWidth 可选 此图像支持的最大宽度(以像素为单位)。客户端禁止支持宽度大于此值的请求。如果指定了maxHeight,则必须指定maxWidth。
maxHeight 可选 此图像支持的最大高度(以像素为单位)。客户端禁止支持高度大于此值的请求。如果指定了maxWidth而未指定maxHeight,则客户端应推断maxHeight=maxWidth。
maxArea 可选 此图像支持的最大区域(以像素为单位)。客户端禁止支持宽度*高度大于此值的请求。

宽度 width 和高度 height 属性提供完整图像的大小,并且是构造磁贴(tile)请求所必需的。

maxWidth、maxHeight和maxArea参数为图像服务器提供了一种表示图像支持大小限制的方法。如果仅指定了maxWidth,或者指定了maxWidth和maxHeight,那么客户端应该期望拒绝具有较大线性尺寸的请求。如果指定了maxArea,那么客户端应该期望具有较大像素区域的请求被拒绝。maxWidth/maxHeight和maxArea参数是独立的,服务器可以实现其中一个或两个限制。服务器必须确保任何大小或磁贴(tile)属性指定的大小在所表示的任何大小限制内。客户端禁止发出超过规定大小限制的请求。

  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "maxHeight": 2000,
  10. "maxWidth": 3000,
  11. "maxArea": 4000000
  12. }

5.3. 尺寸

JSON响应可选具有尺寸sizes属性,该属性用于描述表示完整图像的首选高度height和宽度width组合。

属性 必须? 描述
sizes 可选 具有高度height和宽度width属性的JSON对象数组。这些大小指定了在缩放版本的完整图像的尺寸请求参数的w,h语法中提供的首选值。对于不支持任意大小请求的服务器,这些可能是唯一可用的大小。服务器必须支持使用这些大小的w,h语法构造的请求,即使不支持任意宽度和高度。

sizes数组中的JSON对象具有下表中的属性。对于这些尺寸的图像请求,区域参数应为full,大小参数应为规范的w,h形式,旋转角度应为0。因此,具有默认default色质的jpg格式图像的完整URL将是:

  1. {scheme}://{server}/{prefix}/{identifier}/full/{width},{height}/0/default.jpg
属性 必须? 描述
type 可选 对象的类型。如果存在,则该值必须是字符串Size。
width 必须 要请求的图像的宽度(以像素为单位),以整数形式给出。
height 必须 要请求的图像的高度(以像素为单位),以整数形式给出。
  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "sizes": [
  10. { "width": 150, "height": 100 },
  11. { "width": 600, "height": 400 },
  12. { "width": 3000, "height": 2000 }
  13. ]
  14. }

5.4. 磁贴

JSON响应可选具有磁贴tiles属性,该属性描述了一组图像区域,这些区域在一系列分辨率上具有一致的高度和宽度,可以直观地缝合在一起。

属性 必须? 描述
tiles 可选 一个JSON对象数组,描述用于请求图像区域(磁贴tiles)的参数,这些图像区域对于服务器来说是能够高效提供的。每种描述都给出了非方形磁贴的宽度(高度可选)和一组比例因子,在这些比例因子下,这些尺寸的磁贴是可用的。

tiles数组中的JSON对象具有下表中的属性。宽度width和高度height应用于填充size参数,并与scaleFactors一起用于计算图像请求的区域参数。这在实施说明中有详细描述。

属性 必须? 描述
type 可选 对象的类型。如果存在,则该值必须是字符串Tile。
scaleFactors 必须 图像预定义分片的分辨率比例因子集,表示为正整数,用于除以图像的完整大小。例如,比例因子4表示该服务能够以全图像高度和宽度的1/4或25%高效地传送图像。特定比例因子值在tiles数组中推荐出现一次。
width 必须 要请求的预定义分片的宽度(以像素为单位),以整数形式给出。
height 可选 要请求的预定义分片的高度(以像素为单位),以整数形式给出。如果未在JSON中指定,则默认为与宽度width相同,从而生成方形磁贴。

tiles数组中的每个对象都必须具有唯一的宽度width和高度height组合,如果未明确指定,则默认height=width

  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "tiles": [
  10. { "width": 512, "scaleFactors": [ 1, 2, 4, 8, 16 ] }
  11. ]
  12. }

5.5. 偏好格式

JSON响应可选具有preferredFormats属性,该属性列出此图像服务的一个或多个格式参数值。这允许发布者表示对客户端请求的格式的偏好,例如鼓励使用更有效的格式(如webp),或建议对图像内容提供更好结果的格式(如用于线条艺术或图形的无损webp或png)。

属性 必须? 描述
preferredFormats 可选 作为首选格式参数值的字符串数组,按首选顺序排列。列出的格式参数值必须是在引用的配置文件中指定的值或在extraFormats属性中列出的值(请参见“附加功能”)。
  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "extraFormats": [ "webp" ],
  10. "preferredFormats": [ "webp", "png" ]
  11. }

5.6. 权利

rights属性具有与展示API中相同的语义和要求。

属性 必须? 描述
rights 可选 标识应用于此图像内容的许可证或权限说明的字符串。此属性的值必须是字符串,即从Creative Commons集合中提取的许可证URI,RightsStatements.org中的权限说明URI,或通过已知扩展的注册表机制添加的URI。包含此属性是信息性的,例如,可以用于显示表示权限申明的图标。

如果此图像的发布者要求在查看时显示其他信息,则应通过展示API清单提供这些信息,如链接属性部分所述。

  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "rights": "http://rightsstatements.org/vocab/InC-EDU/1.0/"
  10. }

5.7. 额外功能

JSON响应还可选包含描述通过图像服务提供的附加功能的属性。

属性 必须? 描述
extraQualities 可选 除了默认default值之外,还可以用作色质参数的字符串数组。
extraFormats 可选 除了在引用的配置文件中指定的字符串之外,还可以用作格式参数的字符串数组。
extraFeatures 可选 一个字符串数组,除了在引用的配置文件中指定的功能外,还用来标识服务支持的功能。这些字符串在下表中定义或通过扩展注册

定义了以下功能以在extraFeatures属性中使用:

功能名称 描述
baseUriRedirect 服务的基本URI将重定向到图像信息文档。
canonicalLinkHeader 图像响应上提供了规范图像URI HTTP标头。
cors 所有响应上都提供了CORS HTTP头。
jsonldMediaType JSON-LD媒体类型在请求时提供。
mirroring 图像可以绕垂直轴旋转,从而产生内容的从左到右镜像。
profileLinkHeader 配置文件HTTP标头在图像响应中提供。
regionByPct 可以按百分比请求完整图像的区域。
regionByPx 完整图像的区域可以通过像素尺寸来请求。
regionSquare 可能需要一个正方形区域,其中宽度和高度等于完整图像的较短尺寸。
rotationArbitrary 可以使用90度倍数以外的值来请求图像旋转。
rotationBy90s 图像旋转可能需要90度的倍数。
sizeByConfinedWh 可以如下形式中要求图像尺寸 !w,h
sizeByH 可以如下形式中要求图像尺寸 ,h
sizeByPct 可以如下形式中要求图像尺寸 pct:n
sizeByW 可以如下形式中要求图像尺寸 w,
sizeByWh 可以如下形式中要求图像尺寸 w,h
sizeUpscaling 带有 ^ 前缘的图像尺寸可能被请求。

不支持sizeByW或sizeByWh的服务器,只需提供图像信息文档的sizes属性下列出的图像尺寸或tiles属性所暗示的图像尺寸,即可实现静态文件。
支持sizeUpscaling的服务器必须指定maxWidth或maxArea(请参阅技术属性)。
支持的功能、格式和色质集合是外部配置文件文档中声明的功能、格式和色质以及由extraQualities、extraFormats和extraFeatures属性添加的功能、格式和色质的联合。如果配置文件文档或extraFeatures属性中不存在某个功能,则客户端必须假定该功能不受支持。

本规范中未定义的extraQualities、extraFormat和extraFeatures属性中使用的其他字符串,或图像信息中使用的其他属性,推荐使用其他上下文文档映射到RDF谓词。这些扩展应该添加到顶级@context属性中(请参见技术属性)。必须使用特定于谓词的上下文定义(称为作用域上下文)的JSON-LD1.1功能来最小化跨扩展冲突。社区使用的扩展推荐在扩展注册处注册,但注册不是强制性的。

  1. {
  2. "@context": "http://iiif.io/api/image/3/context.json",
  3. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  4. "type": "ImageService3",
  5. "protocol": "http://iiif.io/api/image",
  6. "profile": "level2",
  7. "width": 6000,
  8. "height": 4000,
  9. "extraFormats": [ "gif", "pdf" ],
  10. "extraQualities": [ "color", "gray" ],
  11. "extraFeatures": [ "canonicalLinkHeader", "rotationArbitrary", "profileLinkHeader" ]
  12. }

5.8. 关链属性

JSON响应可选包含引用外部资源的关联属性,包括为查看器提供附加功能的服务。关键属性具有与展示API中相同的语义和要求。

属性 必须? 描述
partOf 可选 指向引用此图像服务的其他资源的链接,例如指向画布Canvas或清单Manifest的链接。该值必须是JSON对象的数组。每个项目必须具有id和type属性,并且推荐具有label属性。
seeAlso 可选 指向与此资源相关的外部机器可读资源的链接,如XML或RDF描述。应提供外部资源的属性,以帮助客户在多个描述(如果提供)之间进行选择,并适当使用文档。文档的URI必须以特定格式标识数据的单个表示形式。该值必须是JSON对象的数组。每个项目必须具有id和type属性,并且应具有label、format和profile属性。
service 可选 对外部服务的引用,客户端可以直接与该外部服务交互以获得附加信息或功能,例如指向身份验证服务的链接。该值必须是JSON对象的数组。根据服务的定义,每个对象都将具有属性,但必须具有id和type属性,或者@id和@type属性,以便与其他IIIF API向后兼容。每个对象都推荐有一个profile属性。对于已知的服务类型,请参阅服务注册表

partOf、SeeAllow和service中的JSON对象具有下表所示的属性。

属性 必须? 描述
id 必须 外部资源的URI。(如上所述,@id属性可选在service对象中用于向后兼容性。)
type 必须 此资源的类型或类。展示API中给出了图像、文本或音频等基本类型的建议。(如上所述,@type属性可选在service对象中用于向后兼容性。)
label 推荐 此资源的可读标签。label属性可以全面国际化,并且每种语言可以有多个值。此模式在展示API的语言部分有更详细的描述。
format 对于 seeAlso 推荐 此内容资源的特定媒体类型(通常称为MIME类型),例如“image/jpeg”。这对于区分同一总体资源类型的不同格式非常重要,例如区分XML中的文本和纯文本。该值必须是字符串,并且应该是解析此资源时返回Content-Type标头的值。
profile 对于 seeAlso, service 推荐 此资源中可用的纲要schema或命名功能集named set。profile文件可以进一步阐明外部资源的类型type和/或格式format。该值必须是字符串,可以从配置文件注册表中获取或者是一个URI。
  1. {
  2. "@context": [
  3. "http://iiif.io/api/image/3/context.json"
  4. ],
  5. "id": "https://example.org/image-service/abcd12345/1E34750D-38DB-4825-A38A-B60A345E591C",
  6. "type": "ImageService3",
  7. "protocol": "http://iiif.io/api/image",
  8. "profile": "level2",
  9. "width": 6000,
  10. "height": 4000,
  11. "seeAlso": [
  12. {
  13. "id": "https://example.org/image1.xml",
  14. "label": { "en": [ "Technical image metadata" ] },
  15. "type": "Dataset",
  16. "format": "text/xml",
  17. "profile": "https://example.org/profiles/imagedata"
  18. }
  19. ],
  20. "partOf": [
  21. {
  22. "id": "https://example.org/manifest/1",
  23. "type": "Manifest",
  24. "label": { "en": [ "A Book" ] }
  25. }
  26. ],
  27. "service": [
  28. {
  29. "@id": "https://example.org/auth/login",
  30. "@type": "AuthCookieService1",
  31. "profile": "http://iiif.io/api/auth/1/login",
  32. "label": "Login to Example Institution"
  33. }
  34. ]
  35. }

5.9. 完整响应

以下显示图像信息响应,包括所有必需和可选属性。

  1. {
  2. "@context": [
  3. "http://example.org/extension/context1.json",
  4. "http://iiif.io/api/image/3/context.json"
  5. ],
  6. "id": "https://example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
  7. "type": "ImageService3",
  8. "protocol": "http://iiif.io/api/image",
  9. "profile": "level1",
  10. "width": 6000,
  11. "height": 4000,
  12. "maxWidth": 3000,
  13. "maxHeight": 2000,
  14. "maxArea": 4000000,
  15. "sizes": [
  16. { "width": 150, "height": 100 },
  17. { "width": 600, "height": 400 },
  18. { "width": 3000, "height": 2000 }
  19. ],
  20. "tiles": [
  21. { "width": 512, "scaleFactors": [ 1, 2, 4 ] },
  22. { "width": 1024, "height": 2048, "scaleFactors": [ 8, 16 ] }
  23. ],
  24. "rights": "http://rightsstatements.org/vocab/InC-EDU/1.0/",
  25. "preferredFormats": [ "png", "gif"],
  26. "extraFormats": [ "png", "gif", "pdf" ],
  27. "extraQualities": [ "color", "gray" ],
  28. "extraFeatures": [ "canonicalLinkHeader", "rotationArbitrary", "profileLinkHeader" ],
  29. "service": [
  30. {
  31. "id": "https://example.org/service/example",
  32. "type": "Service",
  33. "profile": "https://example.org/docs/example-service.html"
  34. }
  35. ]
  36. }

6. 合规级别和概要文件

图像信息文档必须通过将符合性级别作为概要文件profile属性的值来指定支持API的程度。合规级别必须是ImageApicCompliance文档中列出的并在下表中显示的级别之一。合规级别推荐为满足所有要求的最高合规级别。每个合规级别都对应一个概要文件profile,该文档描述了该级别所需的一组功能,如图像信息部分所述。服务器可选为具有不同标识符的图像声明不同的符合性级别。

合规级别 概要文件URI
level0 http://iiif.io/api/image/3/level0.json
level1 http://iiif.io/api/image/3/level1.json
level2 http://iiif.io/api/image/3/level2.json

还可选在HTTP链接头(RFC5988)中给出符合性级别,在图像和图像信息响应上使用带有参数rel=”profile”的概要文件文档URI。完整的标题可能如下所示:
Link: http://iiif.io/api/image/3/level1.json;rel=”profile”
ApacheHTTPServer实现说明中显示了在ApacheHTTP服务器上设置此头的方法。

7. 服务器响应

服务器必须支持HTTP GET方法来检索图像API资源。服务器推荐支持HTTP OPTIONS方法作为CORS预请求模式的一部分,推荐实现也支持HTTP HEAD方法。

7.1. CORS

服务器推荐通过遵循CORSSSpecification的相关要求(包括Access-Control-Allow-Origin标头和预请求模式),支持图像API资源的重用。ApacheHTTPServer实现说明中提供了启用这些行为的方法。

7.2. 成功响应

当请求已成功处理时,服务器可能会发送带有200(成功)或3xx(重定向)状态代码的HTTP响应。如果状态代码为200,则实体主体必须是请求的图像或信息文档。如果状态代码为301、302、303或304,则实体主体不受限制,但推荐为空。如果状态代码为301、302或303,则必须设置包含满足请求的图像的URI的位置HTTP头。这使服务器能够有一个规范URI来促进响应的缓存。状态代码304完全按照HTTP规范处理。客户端推荐期望遇到所有这些情况,并且不能假设初始响应的实体体必然包含图像数据。

7.3. 错误条件

服务器解析请求和检测错误的顺序没有规定。请求可能会在遇到第一个错误时失败,并返回相应的HTTP状态代码,下面的列表中给出了常见代码。推荐在错误响应的主体中包含一个可读的纯文本或html错误描述。

状态代码 描述
400 Bad Request 服务器无法完成请求,因为客户端发出的请求语法不正确。
401 Unauthorized 需要身份验证,但未提供身份验证。查看身份验证获取详情。
403 Forbidden 不允许用户(无论是否经过身份验证)执行请求的操作。
404 Not Found 标识符指定的图像资源不存在,此图像服务不支持请求中一个或多个参数的值,或者请求的尺寸大于指定的限制。
500 Internal Server Error 服务器遇到意外错误,无法满足请求。
501 Not Implemented 服务器收到未实现的有效IIIF请求。
503 Service Unavailable 由于加载/维护问题,服务器正忙/暂时不可用。

7.4. HTTP版本

预期需要响应来自同一客户端的多个并发请求的实现推荐通过HTTP/2使API可用,以避免重复打开和关闭连接。这也避免了浏览器通过HTTP1.1对每个站点的并发连接数施加的限制。

8. 认证

图像通常是网页或应用程序中的辅助资源。对于web页面,图像嵌入在HTML img标记中,并通过额外的HTTP请求进行检索。当用户无法加载网页时,可以将用户重定向到另一个页面并提供身份验证的机会,这是一种普遍接受的行为。图像等辅助资源不是这样的,用户只会看到一个损坏的图像图标。
没有提出新的身份验证机制,也没有授权业务逻辑的角色。相反,认证要求和过程应该在任何IIIF特定上下文之外处理,但应该在IIIF可感知的访问控制工作流中处理。请参阅III认证规范

9. URI编码和解码

此API的URI语法依赖于禁止编码的斜杠(/)分隔符。客户端必须对特殊字符进行百分比编码(下面的to编码集:RFC3986的百分比和gen-delims,冒号除外)加上请求组件中US-ASCII集之外的任何字符。例如,URI的标识符部分中的任何斜杠都必须进行百分比编码。编码仅对标识符是必需的,因为其他组件将不包括特殊字符。对其他字符进行百分比编码不会产生歧义,但这是不必要的。
to编码集 = “/“ / “?” / “#” / “[“ / “]” / “@” / “%”

参数 URI路径
identifier=id1 region=full size=max rotation=0 quality=default id1/full/max/0/default
identifier=id1 region=0,10,100,200 size=pct:50 rotation=90 quality=default format=png id1/0,10,100,200/pct:50/90/default.png
identifier=id1 region=pct:10,10,80,80 size=50, rotation=22.5 quality=color format=jpg id1/pct:10,10,80,80/50,/22.5/color.jpg
identifier=bb157hs6068 region=full size=max rotation=270 quality=gray format=jpg bb157hs6068/full/max/270/gray.jpg
identifier=ark:/12025/654xz321 region=full size=max rotation=0 quality=default ark:%2F12025%2F654xz321/full/max/0/default
identifier=urn:foo:a123,456 region=full size=max rotation=0 quality=default urn:foo:a123,456/full/max/0/default
identifier=urn:sici:1046-8188(199501)13:1%3C69:FTTHBI%3E2.0.TX;2-4 region=full size=max rotation=0 quality=default urn:sici:1046-8188(199501)13:1%253C69:FTTHBI%253E2.0.TX;2-4/full/max/0/default
identifier=https://example.com/?54#a region=full size=max rotation=0 quality=default http:%2F%2Fexample.com%2F%3F54%23a/full/max/0/default

无法处理任意编码的标识符的服务器推荐尽最大努力仅使用客户端不用编码任何字符的图像标识符,因此推荐将标识符中的字符限制为字母、数字和下划线字符。

10. 安全考虑

此API定义URI语法及其组件相关的语义。URI的组合除了可能暴露URI中的敏感信息或暴露用户的浏览/查看行为外,没有什么安全考虑。
实现此API的服务器应用程序应考虑可能的拒绝服务攻击,以及基于DNS欺骗的认证漏洞。应用程序必须小心地以避免溢出、注入和目录遍历攻击的方式解析和清理传入请求(URI)。
建议尽早对URI进行健全性检查(长度、尾随GET、无效字符、超出范围的参数)并使用适当的响应代码进行拒绝。

11. 附录

A. 版本控制

从版本2.0开始,本规范遵循语义版本控制。有关如何实现的详细信息,请参阅API版本控制说明。

B. 致谢

非常感谢IIIF社区成员的持续参与、创新想法和反馈。

C. 更改日志

日期 描述
2020-06-03 Version 3.0 (Orange Blooms) 查看更改日志
2017-06-09 Version 2.1.1 查看更改日志
2016-05-12 Version 2.1 (Crowned Eagle) 查看更改日志
2014-09-11 Version 2.0 (Voodoo Bunny) 查看更改日志
2013-09-17 Version 1.1 (unnamed) 查看更改日志
2012-08-10 Version 1.0 (unnamed)