Deep Zoom is a protocol developed by Microsoft consisting of two components:
The idea is that the client—a deep-zooming viewer—will fetch the manifest and then, from that, be able to fetch the tiles it needs from the folder based on their relative pathname, which consists of a resolution level, tile grid offset, and format suffix. (Deep Zoom was designed so that all variant images would be generated in advance and served as static files.)
Deep Zoom is a minimalist protocol that is not a good candidate for generating thumbnails or variants of arbitrary size. It is only suitable for zooming viewers.
This endpoint is available by default at /dzi. This path can be changed using the endpoint.deepzoom.path
configuration key.
This endpoint can be enabled or disabled using the endpoint.deepzoom.enabled
configuration key. When disabled, all requests to it will return HTTP 404.
The IIIF Image API is a general-purpose HTTP-based image API. It supports access to arbitrary image regions at arbitrary scales, rotations, and color schemes, and in arbitrary formats, as supported by the server. It also supports access to image information including full size, tile sizes, and, if the server is so configured, embedded metadata.
The IIIF Image API endpoints are recommended for general image retrieval.
This endpoint is available by default at /iiif/3. This path can be changed using the endpoint.iiif.3.path
configuration key.
This endpoint can be enabled or disabled using the endpoint.iiif.3.enabled
configuration key. When disabled, all requests to it will return HTTP 404.
This API is implemented at a compliance level of 2.
sizes
endpoint.iiif.min_size
. (To restrict access to only these sizes, use the endpoint.iiif.restrict_to_sizes
configuration option.)tiles
width
and height
are a multiple of the native tile dimensions no smaller than the value of the endpoint.iiif.min_tile_size
configuration key.endpoint.iiif.min_tile_size
configuration key.maxArea
max_pixels
and max_scale
.pageCount
1
, but for formats that support multiple pages, like PDF, it will contain the number of pages in the file.attribution
, service
, etc.)In order to modify the information JSON response before it is sent to the client (such as to declare service profiles or add a rights statement), the delegate class needs to implement the customize_iiif3_information_response()
method. An example implementation follows:
class CustomDelegate
def customize_iiif3_information_response(info)
info['rights'] = "http://example.org/license.html"
info['service'] = {
"@id" => "https://example.org/auth/login",
"@type" => "AuthCookieService1",
"profile" => "http://iiif.io/api/auth/1/login",
"label" => "Log In"
}
end
end
This endpoint is available at /iiif/2. This path can be changed using the endpoint.iiif.2.path
configuration key.
This endpoint can be enabled or disabled using the endpoint.iiif.2.enabled
configuration key. When disabled, all requests to it will return HTTP 404.
Version 2.1.1 of this API is implemented at a compliance level of 2.
sizes
endpoint.iiif.min_size
. (To restrict access to only these sizes, use the endpoint.iiif.restrict_to_sizes
configuration option.)tiles
width
and height
are a multiple of the native tile dimensions no smaller than the value of the endpoint.iiif.min_tile_size
configuration key.endpoint.iiif.min_tile_size
configuration key.profile.formats
profile.maxArea
max_pixels
and max_scale
.pageCount
1
, but for formats that support multiple pages, like PDF, it will contain the number of pages in the file.attribution
, service
, etc.)In order to modify the information JSON response before it is sent to the client (such as to declare service profiles or, beginning in Image API 2.1, an optional rights statement and/or logo), the delegate class needs to implement the customize_iiif2_information_response()
method. An example implementation follows:
class CustomDelegate
def customize_iiif2_information_response(info)
info['rights'] = "http://example.org/license.html"
info['service'] = {
"@id" => "https://example.org/auth/login",
"@type" => "AuthCookieService1",
"profile" => "http://iiif.io/api/auth/1/login",
"label" => "Log In"
}
end
end
This endpoint is available at /iiif/1. This path can be changed using the endpoint.iiif.1.path
configuration key.
This endpoint can be enabled or disabled using the endpoint.iiif.1.enabled
configuration key. When disabled, all requests to it will return HTTP 404.
Version 1.1 of this API is implemented at a compliance level of 2.
tile_width
and tile_height
endpoint.iiif.min_tile_size
configuration key, or the full image dimensions.endpoint.iiif.min_tile_size
.formats
page_count
1
, but for formats that support multiple pages, like PDF, it will contain the number of pages in the file.Image endpoints support these additional features:
For image formats that support multiple pages within the same image file, a page number argument can be supplied in the identifier path component. See Meta-Identifiers for more information.
Metadata embedded within most supported formats can be exposed in IIIF information responses. See Viewing metadata.
The Content-Disposition
HTTP response header tells clients whether to attempt to display a response entity inline or download it, perhaps accompanied by a user prompt. A response-content-disposition
query argument can be used to suggest a value to override that on a per-request basis. This is useful for "linking to a download." For example, the following URL will cause web browsers to download the image identified by some-identifier
and save it as image.jpg:
http://my-image-server/iiif/3/some-identifier/full/max/0/default.jpg ?response-content-disposition=attachment%3B%20filename%3Dimage.jpg
The value of the query argument must be URL-encoded. In this case, the decoded form is: attachment; filename=image.jpg
.
The behavior of the caches can be overridden on a per-request basis by supplying a cache
URL query argument with one of the following values:
nocache
or false
Cache-Control
response header that may be configured.recache
If the other image endpoints don't meet your needs, custom image endpoints can be developed and supplied via the plugin mechanism. The example endpoint and Javadoc may be useful references.