翻译者:码农宋襄公
链接:https://iiif.io/api/image/3.0/implementation/
目录
1. HTTP实现
2. 关联数据实现
3. 磁贴区域参数计算
4. 最大尺寸计算
5. 旋转图像的图像大小计算
附录
A. 更改日志
1. HTTP实现
- 对于能够保存图像的用例,请使用HTTP内容处置头(RFC6266)提供一个方便的文件名,根据提供的标识符和参数来区分图像。
- 服务器实现可能依赖于转义URI路径的组件或框架,例如Python的WSGI。在这种情况下,可以从右侧解析请求的URI,以便处理可能包含斜杠的标识符,前提是已知API参数和服务器处理请求的前缀。
另请参见与图像API和其他IIIF规范相关的Apache HTTP服务器实现说明。
2. 关联数据实现
关联数据实现可以使用JSON-LD框架实现说明中提供的框架构造info.json响应。
3. 磁贴区域参数计算
请求图像磁贴时,必须计算区域Region和尺寸Size参数,以考虑整个图像的右边缘和下边缘的部分磁贴,该图像不是缩放磁贴大小的精确倍数。下面的算法显示为Python代码,并假设整型输入和整数算术(即除法时丢弃的余数)。输入为:从左上角的(0,0)开始计数的完整图像内容的尺寸(宽度width、高度height)、比例因子s、磁贴大小(tw、th)和磁贴坐标(n、m)。请注意,舍入方法取决于实现。
# Calculate region parameters /xr,yr,wr,hr/
xr = n * tw * s
yr = m * th * s
wr = tw * s
if (xr + wr > width):
wr = width - xr
hr = th * s
if (yr + hr > height):
hr = height - yr
# Calculate size parameters /ws,hs/
ws = tw
if (xr + tw*s > width):
ws = (width - xr + s - 1) / s # +s-1 in numerator to round up
hs = th
if (yr + th*s > height):
hs = (height - yr + s - 1) / s
4. 最大尺寸计算
如果服务器实现使用maxWidth、maxHeight和/或maxArea(在技术属性中定义)约束最大尺寸,则实现在处理尺寸参数时必须检查提取区域的尺寸:
- 如果指定了max size参数,则实现必须根据约束检查提取区域的默认尺寸或完整尺寸。如果尺寸受到约束,则提取的区域将缩放为较小的尺寸。
- 如果使用了另一个size参数,则实现必须根据约束检查结果缩放图像内容的尺寸。如果尺寸受到约束,则提取和缩放的区域将进一步缩放为较小的尺寸。
该规范未定义用于缩放受约束图像以适应约束的算法。图像服务器可以实现缩放图像以尽可能接近约束的算法,或者可以实现缩放图像的算法,重点是保持纵横比,这可能导致更小的维度。
以下Python代码采用图像内容维度width、height和可选约束maxWidth、maxWidth、maxHeight。它返回的图像内容大小w,h在约束范围内,但接近约束。
# default without constraints
(w, h) = (width, height)
# use size constraints if present, else full
if maxArea and maxArea < (w * h):
# approximate area limit, rounds down to avoid possibility of
# slightly exceeding maxArea
scale = (float(maxArea) / float(w * h)) ** 0.5
w = int(w * scale)
h = int(h * scale)
if maxWidth:
if not maxHeight:
maxHeight = maxWidth
if maxWidth < w:
# calculate wrt original width, height rather than
# w, h to avoid compounding rounding issues
w = maxWidth
h = int(float(height * maxWidth) / float(width) + 0.5)
if maxHeight < h:
h = maxHeight
w = int(float(width * maxHeight) / float(height) + 0.5)
5. 旋转图像的图像大小计算
如旋转中所述,为了保留请求图像内容的大小,旋转将更改返回图像的宽度和高度尺寸。对于给定的起始大小和旋转,计算返回图像尺寸的公式如下所示。请注意,舍入方法取决于实现,某些语言需要将角度从度转换为弧度。
# (w,h) are size parameters, n is rotation angle
w_returned = abs(w*cos(n)) + abs(h*sin(n))
h_returned = abs(h*cos(n)) + abs(w*sin(n))
附录
A. 更改日志
日期 | 描述 |
---|---|
2018-02-20 | 从图像API中分离并更新 |