@allmaps/if-parser (英语)
这是用于解析 IIIF 的 JavaScript 模块 收款, (中文(简体) ), 声明 财务报告和审定财务报表 图像这是一个核心模块 所有图 并用于其所有应用和组件.
注:本模块将IIIF数据解为Allmaps内部使用的中间格式. 它没有分析 全部 由 IIIF 图像和演示文稿 APIs 定义的属性,只有 Allmaps 函数所需的属性. 参见 src/classes 财务报告和审定财务报表 src/schemas 这些 proeprties 的细节目录 .
@allmaps/iiif-parser 使用 TypeScript 书写并使用 佐德语Name。 。 。 .
支持IIIF图像和演示API的版本1、2和3.
这个模块已经在各种IIIF服务器上进行了测试. 运行 npm test 运行所有测试.
安装
这是一个只在浏览器和Node.js中工作的无害环境管理模块.
节点.js:
第一,跑开 pnpm install @allmaps/iiif-parser 中添加此模块.
import { IIIF } from '@allmaps/iiif-parser'
浏览器 :
<script type="module">
import { IIIF } from 'https://unpkg.com/@allmaps/iiif-parser?module'
</script>
使用量
import { IIIF } from '@allmaps/iiif-parser'
const manifestUrl =
'https://collections.leventhalmap.org/search/commonwealth:wd376720z/manifest'
const manifest = await fetch(manifestUrl).then((response) => response.json())
const parsedManifest = IIIF.parse(manifest)
console.log(parsedManifest)
这个会日志 parsedManifest 转到控制台 :
{
"embedded": false,
"type": "manifest",
"uri": "https://ark.digitalcommonwealth.org/ark:/50959/wd376720z/manifest",
"majorVersion": 2,
"label": {
"none": [
"Map of Boston and vicinity showing tracks operated by the Boston Elevated Railway Co., surface lines"
]
},
"canvases": [
{
"type": "canvas",
"width": 7486,
"height": 9138,
"uri": "https://ark.digitalcommonwealth.org/ark:/50959/wd376720z/canvas/wd3767217",
"label": {
"none": ["image 1"]
},
"image": {
"embedded": true,
"type": "image",
"uri": "https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:wd3767217",
"majorVersion": 2,
"supportsAnyRegionAndSize": true,
"width": 7486,
"height": 9138
}
}
],
"metadata": [
{
"label": {
"none": ["Title"]
},
"value": {
"none": [
"Map of Boston and vicinity showing tracks operated by the Boston Elevated Railway Co., surface lines"
]
}
},
{
"label": {
"none": ["Date"]
},
"value": {
"none": ["1898"]
}
},
{
"label": {
"none": ["Publisher"]
},
"value": {
"none": ["Boston, Mass : [Geo. H. Walker & Co.]"]
}
},
{
"label": {
"none": ["Type of Resource"]
},
"value": {
"none": ["Cartographic"]
}
},
{
"label": {
"none": ["Format"]
},
"value": {
"none": ["Maps"]
}
},
{
"label": {
"none": ["Language"]
},
"value": {
"none": ["English"]
}
},
{
"label": {
"none": ["Subjects"]
},
"value": {
"none": [
"Boston Elevated Railway Company",
"Street-railroads--Massachusetts--Boston--Maps",
"Boston (Mass.)--Maps",
"Massachusetts--Maps"
]
}
},
{
"label": {
"none": ["Location"]
},
"value": {
"none": ["Boston Public Library"]
}
},
{
"label": {
"none": ["Collection (local)"]
},
"value": {
"none": ["Norman B. Leventhal Map Center Collection"]
}
},
{
"label": {
"none": ["Identifier"]
},
"value": {
"none": [
"https://ark.digitalcommonwealth.org/ark:/50959/wd376720z",
"06_01_003041",
"G3764.B6P33 1898 .M3",
"39999058997337"
]
}
},
{
"label": {
"none": ["Terms of Use"]
},
"value": {
"none": [
"No known copyright restrictions.",
"No known restrictions on use."
]
}
}
]
}
也可以打电话 parse 函数在特定的 IIIF 类上:
import { Image } from '@allmaps/iiif-parser'
const imageUrl =
'https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:wd3767217'
const image = await fetch(`${imageUrl}/info.json`).then((response) =>
response.json()
)
const parsedImage = Image.parse(image)
console.log(parsedImage)
这个会日志 parsedImage 转到控制台 :
{
"embedded": false,
"type": "image",
"uri": "https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:wd3767217",
"majorVersion": 2,
"supportsAnyRegionAndSize": true,
"width": 7486,
"height": 9138,
"tileZoomLevels": [
{
"scaleFactor": 1,
"width": 1024,
"height": 1024,
"originalWidth": 1024,
"originalHeight": 1024,
"columns": 8,
"rows": 9
},
{
"scaleFactor": 2,
"width": 1024,
"height": 1024,
"originalWidth": 2048,
"originalHeight": 2048,
"columns": 4,
"rows": 5
},
{
"scaleFactor": 4,
"width": 1024,
"height": 1024,
"originalWidth": 4096,
"originalHeight": 4096,
"columns": 2,
"rows": 3
},
{
"scaleFactor": 8,
"width": 1024,
"height": 1024,
"originalWidth": 8192,
"originalHeight": 8192,
"columns": 1,
"rows": 2
},
{
"scaleFactor": 16,
"width": 1024,
"height": 1024,
"originalWidth": 16384,
"originalHeight": 16384,
"columns": 1,
"rows": 1
},
{
"scaleFactor": 32,
"width": 1024,
"height": 1024,
"originalWidth": 32768,
"originalHeight": 32768,
"columns": 1,
"rows": 1
},
{
"scaleFactor": 64,
"width": 1024,
"height": 1024,
"originalWidth": 65536,
"originalHeight": 65536,
"columns": 1,
"rows": 1
}
],
"sizes": [
{
"width": 117,
"height": 143
},
{
"width": 234,
"height": 286
},
{
"width": 468,
"height": 571
},
{
"width": 936,
"height": 1142
},
{
"width": 1872,
"height": 2285
},
{
"width": 3743,
"height": 4569
},
{
"width": 7486,
"height": 9138
}
]
}
您可以使用 instanceof 操作员或检查 type 属性 :
import { IIIF } from '@allmaps/iiif-parser'
const url =
'https://collections.leventhalmap.org/search/commonwealth:wd376720z/manifest'
const iiif = await fetch(url).then((response) => response.json())
const parsedIiif = IIIF.parse(manifest)
if (parsedIiif.type === 'manifest') {
console.log('This is a IIIF Manifest!')
}
国 际
分析 IIIF 资源也可以使用 图像 CLI。 。 。 .
例如:
curl https://collections.leventhalmap.org/search/commonwealth:wd376720z/manifest | allmaps iiif parse
许可证
麻省理工学院
API 密码
new Canvas(parsedCanvas)
参数
parsedCanvas(单位:千美元){ '@id': string; '@type'?: "sc:Canvas" | undefined; width: number; height: number; images: Array<{ resource: { width?: number | undefined; height?: number | undefined; service: { '@id': string; '@type'?: "ImageService1" | "ImageService2" | "ImageService3" | undefined; profile: string | ValidImage2ProfileArray; width...(中文(简体) )
回返
Canvas。 。 。 .
Canvas#annotations?
类型
Array<{id: string; type: 'AnnotationPage'; items?: unknown[]}>
Canvas#description?
类型
{[language: string]: Array<string | number | boolean>}
Canvas#height
类型
number
Canvas#homepage?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
language?: string | string[]
}>
Canvas#image
类型
EmbeddedImage | Image
Canvas#label?
类型
{[language: string]: Array<string | number | boolean>}
Canvas#metadata?
类型
Array<MetadataItem>
Canvas#navDate?
类型
Date
Canvas#navPlace?
类型
object
Canvas#provider?
类型
Array<Agent>
Canvas#rendering?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
}>
Canvas#requiredStatement?
类型
{label: LanguageString; value: LanguageString}
Canvas#rights?
类型
string
Canvas#seeAlso?
类型
Array<{id: string; type?: string; format?: string; profile?: string}>
Canvas#summary?
类型
{[language: string]: Array<string | number | boolean>}
Canvas#thumbnail?
类型
Array<{
id: string
type?: string
format?: string
width?: number
height?: number
}>
Canvas#type
类型
CanvasTypeString
Canvas#uri
类型
string
Canvas#width
类型
number
new Collection(parsedCollection, options)
参数
parsedCollection(单位:千美元){ '@id': string; '@type': "sc:Collection"; manifests?: Array<{ '@id': string; '@type': "sc:Collection"; manifests?: Array<... | { '@id': string; '@type': "sc:Manifest"; label?: string | Array<string> | Array<{ '@value': string | Array<string>; '@language'?: string | undefined; }> | { '@value': string | Array<string>...(中文(简体) )options?(单位:千美元)Partial<ConstructorOptions> | undefined(中文(简体) )
回返
Collection。 。 。 .
扩展
EmbeddedCollection
Collection#annotations?
类型
Array<{id: string; type: 'AnnotationPage'; items?: unknown[]}>
Collection#canvases
类型
Array<Canvas>
Collection#embedded
类型
false
Collection#fetchAllItems(options)
参数
options?(单位:千美元)Partial<FetchNextItemOptions> | undefined(中文(简体) )
回返
Promise<Array<FetchNextItemResults<Collection | Image | Manifest>>>。 。 。 .
Collection#fetchItemWithId(id, fetchFn)
参数
id(单位:千美元)string(中文(简体) )fetchFn(单位:千美元)| ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined(中文(简体) )
回返
Promise<EmbeddedCollection | EmbeddedManifest | undefined>。 。 。 .
Collection#fetchItemWithIndex(index, fetchFn)
参数
index(单位:千美元)number(中文(简体) )fetchFn(单位:千美元)| ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined(中文(简体) )
回返
Promise<Collection | EmbeddedCollection | EmbeddedManifest | Manifest>。 。 。 .
Collection#fetchNextItem(options, depth)
参数
options?(单位:千美元)Partial<FetchNextItemOptions> | undefined(中文(简体) )depth(单位:千美元)number | undefined(中文(简体) )
回返
AsyncGenerator< FetchNextItemResults<Collection | Image | Manifest>, void, void >。 。 。 .
Collection#fetchUntilPath(path)
参数
path(单位:千美元)Array<number>(中文(简体) )
回返
Promise<void>。 。 。 .
Collection#getItemAtPath(path)
参数
path(单位:千美元)Array<number>(中文(简体) )
回返
Canvas | EmbeddedCollection | EmbeddedManifest | undefined。 。 。 .
Collection#homepage?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
language?: string | string[]
}>
Collection#images
类型
Array<EmbeddedImage | Image>
Collection#items
类型
Array<never>
Collection#provider?
类型
Array<Agent>
Collection#rendering?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
}>
Collection#requiredStatement?
类型
{label: LanguageString; value: LanguageString}
Collection#rights?
类型
string
Collection#seeAlso?
类型
Array<{id: string; type?: string; format?: string; profile?: string}>
Collection#source?
类型
unknown
Collection#summary?
类型
{[language: string]: Array<string | number | boolean>}
Collection.parse(iiifCollection, options)
解析 IIIF 收藏并返回 a 收藏 包含解析版本
参数
iiifCollection(单位:千美元)unknown(中文(简体) )- IIIF收集的原始数据
options?(单位:千美元)Partial<ParseOptions> | undefined(中文(简体) )
回返
已解析的 IIIF 收藏Collection) (中文(简体) ).
new EmbeddedCollection(parsedCollection)
参数
parsedCollection(单位:千美元){ '@id': string; '@type': "sc:Collection"; manifests?: Array<{ '@id': string; '@type': "sc:Collection"; manifests?: Array<... | { '@id': string; '@type': "sc:Manifest"; label?: string | Array<string> | Array<{ '@value': string | Array<string>; '@language'?: string | undefined; }> | { '@value': string | Array<string>...(中文(简体) )
回返
EmbeddedCollection。 。 。 .
EmbeddedCollection#description?
类型
{[language: string]: Array<string | number | boolean>}
EmbeddedCollection#embedded
类型
true
EmbeddedCollection#label?
类型
{[language: string]: Array<string | number | boolean>}
EmbeddedCollection#majorVersion
类型
1 | 2 | 3
EmbeddedCollection#metadata?
类型
Array<MetadataItem>
EmbeddedCollection#navDate?
类型
Date
EmbeddedCollection#navPlace?
类型
object
EmbeddedCollection#thumbnail?
类型
Array<{
id: string
type?: string
format?: string
width?: number
height?: number
}>
EmbeddedCollection#type
类型
CollectionTypeString
EmbeddedCollection#uri
类型
string
EmbeddedCollection.parse(iiifCollection, options)
解析 IIIF 收藏并返回 a 收藏 包含解析版本
参数
iiifCollection(单位:千美元)unknown(中文(简体) )- IIIF收集的原始数据
options?(单位:千美元)Partial<ParseOptions> | undefined(中文(简体) )
回返
已解析的 IIIF 收藏Collection) (中文(简体) ).
new EmbeddedImage(parsedImage, options)
参数
parsedImage(单位:千美元){ '@context': "http://library.stanford.edu/iiif/image-api/1.1/context.json"; '@id': string; profile?: string | undefined; width: number; height: number; scale_factors?: Array<number> | undefined; tile_width?: number | undefined; tile_height?: number | undefined; } | { ...; } | { ...; } | EmbeddedImageType(中文(简体) )options?(单位:千美元)Partial<ImageConstructorOptions> | undefined(中文(简体) )
回返
EmbeddedImage。 。 。 .
EmbeddedImage#embedded
类型
true
EmbeddedImage#getImageRequest(size, mode)
参数
size(单位:千美元){width: number; height: number}(中文(简体) )mode(单位:千美元)Fit | undefined(中文(简体) )
回返
Array<Array<ImageRequest>> | ImageRequest。 。 。 .
EmbeddedImage#getImageUrl(imageRequest, options)
生成用于请求区域和大小的 IIIF 图像 API URL
参数
imageRequest(单位:千美元){region?: Region; size?: SizeObject}(中文(简体) )- 图像请求对象, 包含想要的区域和请求图像的大小
options?(单位:千美元)ImageUrlOptions | undefined(中文(简体) )- 生成请求的图像 URL 的选项
回返
图像 API URL 用于获取请求的图像(string) (中文(简体) ).
EmbeddedImage#height
类型
number
EmbeddedImage#majorVersion
类型
1 | 2 | 3
EmbeddedImage#maxArea
类型
number | undefined
EmbeddedImage#maxHeight
类型
number | undefined
EmbeddedImage#maxWidth
类型
number | undefined
EmbeddedImage#preferredFormats?
类型
Array<string>
EmbeddedImage#supportedFormats
类型
Array<string>
EmbeddedImage#supportsAnyRegionAndSize
类型
boolean
EmbeddedImage#type
类型
ImageTypeString
EmbeddedImage#uri
类型
string
EmbeddedImage#width
类型
number
new EmbeddedManifest(parsedManifest)
参数
parsedManifest(单位:千美元){ '@id': string; '@type': "sc:Manifest"; sequences: Array<{ canvases: Array<{ '@id': string; '@type'?: "sc:Canvas" | undefined; width: number; height: number; images: Array<{ resource: { width?: number | undefined; height?: number | undefined; service: { ...; } | ... 2 more ... | { ...; }; }; }>; ... 9 more ...; nav...(中文(简体) )
回返
EmbeddedManifest。 。 。 .
EmbeddedManifest#description?
类型
{[language: string]: Array<string | number | boolean>}
EmbeddedManifest#embedded
类型
true
EmbeddedManifest#label?
类型
{[language: string]: Array<string | number | boolean>}
EmbeddedManifest#majorVersion
类型
1 | 2 | 3
EmbeddedManifest#metadata?
类型
Array<MetadataItem>
EmbeddedManifest#navDate?
类型
Date
EmbeddedManifest#navPlace?
类型
object
EmbeddedManifest#thumbnail?
类型
Array<{
id: string
type?: string
format?: string
width?: number
height?: number
}>
EmbeddedManifest#type
类型
ManifestTypeString
EmbeddedManifest#uri
类型
string
new IIIF()
包含 IIIF 资源静态剖析函数的基础类
参数
没有参数.
回返
IIIF。 。 。 .
IIIF.parse(iiifResource, options)
作为 IIIF 资源解析并返回包含解析版本的类
参数
iiifResource(单位:千美元)unknown(中文(简体) )- IIIF资源的来源数据
options?(单位:千美元)Partial<ParseOptions> | undefined(中文(简体) )
回返
已解析的 IIIF 资源( R)Collection | Image | Manifest) (中文(简体) ).
new Image(parsedImage, options)
参数
parsedImage(单位:千美元){ '@context': "http://library.stanford.edu/iiif/image-api/1.1/context.json"; '@id': string; profile?: string | undefined; width: number; height: number; scale_factors?: Array<number> | undefined; tile_width?: number | undefined; tile_height?: number | undefined; } | { ...; } | { ...; }(中文(简体) )options?(单位:千美元)Partial<ConstructorOptions> | undefined(中文(简体) )
回返
Image。 。 。 .
扩展
EmbeddedImage
Image#embedded
类型
false
Image#getImageRequest(size, mode)
返回所请求区域的图像请求对象和大小
参数
size(单位:千美元){width: number; height: number}(中文(简体) )- 请求缩略图的大小
mode(单位:千美元)Fit | undefined(中文(简体) )- 所请求缩略图的理想匹配模式
回返
图像请求对象, 可用于获取请求的缩略图( Q)Array<Array<ImageRequest>> | ImageRequest) (中文(简体) ).
Image#getTileImageRequest(zoomLevel, column, row)
返回一个带有所请求的缩放级别、列和行的平板的图像请求对象
参数
zoomLevel(单位:千美元){ scaleFactor: number width: number height: number originalWidth: number originalHeight: number columns: number rows: number }(中文(简体) )- 所请求的平板的预期缩放水平
column(单位:千美元)number(中文(简体) )- 所请求的瓦片的列
row(单位:千美元)number(中文(简体) )- 所请求的平板字行
回返
图像请求对象, 可用于取取请求的平板 ({region?: Region; size?: SizeObject}) (中文(简体) ).
Image#sizes?
类型
Array<SizeObject>
Image#source?
类型
unknown
Image#tileZoomLevels
类型
Array<TileZoomLevel>
Image.parse(iiifImage, parseOptions)
解析一个 IIIF 图像并返回 a 图像 包含解析版本
参数
iiifImage(单位:千美元)unknown(中文(简体) )- IIIF图像的来源数据
parseOptions?(单位:千美元)Partial<ParseOptions> | undefined(中文(简体) )
回返
解析的 IIIF 图像 (Image) (中文(简体) ).
ImageRequest
字段
region?(单位:千美元){x: number; y: number; width: number; height: number}(中文(简体) )size?(单位:千美元){width: number; height: number}(中文(简体) )
ImageUrlOptions
字段
preferredFormats?(单位:千美元)Array<string>(中文(简体) )
LanguageString
字段
[language: string](单位:千美元)Array<string | number | boolean>(中文(简体) )
MajorVersion
类型
1 | 2 | 3
new Manifest(parsedManifest, options)
参数
parsedManifest(单位:千美元){ '@id': string; '@type': "sc:Manifest"; sequences: Array<{ canvases: Array<{ '@id': string; '@type'?: "sc:Canvas" | undefined; width: number; height: number; images: Array<{ resource: { width?: number | undefined; height?: number | undefined; service: { ...; } | ... 2 more ... | { ...; }; }; }>; ... 9 more ...; nav...(中文(简体) )options?(单位:千美元)Partial<ConstructorOptions> | undefined(中文(简体) )
回返
Manifest。 。 。 .
扩展
EmbeddedManifest
Manifest#annotations?
类型
Array<{id: string; type: 'AnnotationPage'; items?: unknown[]}>
Manifest#canvases
类型
Array<never>
Manifest#embedded
类型
false
Manifest#fetchAllItems(fetchFn)
参数
fetchFn(单位:千美元)| ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined(中文(简体) )
回返
Promise<Array<FetchNextItemResults<Image>>>。 。 。 .
Manifest#fetchImageByUri(imageUri, fetchFn)
参数
imageUri(单位:千美元)string(中文(简体) )fetchFn(单位:千美元)| ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined(中文(简体) )
回返
Promise<Image | undefined>。 。 。 .
Manifest#fetchNextItem(fetchFn, depth)
参数
fetchFn(单位:千美元)| ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined(中文(简体) )depth(单位:千美元)number | undefined(中文(简体) )
回返
AsyncGenerator<FetchNextItemResults<Image>, void, void>。 。 。 .
Manifest#homepage?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
language?: string | string[]
}>
Manifest#images
类型
Array<EmbeddedImage | Image>
Manifest#provider?
类型
Array<Agent>
Manifest#rendering?
类型
Array<{
id: string
type?: string
label?: LanguageString
format?: string
}>
Manifest#requiredStatement?
类型
{label: LanguageString; value: LanguageString}
Manifest#rights?
类型
string
Manifest#seeAlso?
类型
Array<{id: string; type?: string; format?: string; profile?: string}>
Manifest#source?
类型
unknown
Manifest#summary?
类型
{[language: string]: Array<string | number | boolean>}
Manifest.parse(iiifManifest, options)
分析 IIIF 资源并返回 a 声明 包含解析版本
参数
iiifManifest(单位:千美元)unknown(中文(简体) )- IIIF的原始数据
options?(单位:千美元)Partial<ParseOptions> | undefined(中文(简体) )
回返
分析的 IIIF 宣言Manifest) (中文(简体) ).
Metadata
类型
Array<MetadataItem>
ProfileProperties
字段
maxArea?(单位:千美元)number(中文(简体) )maxHeight?(单位:千美元)number(中文(简体) )maxWidth?(单位:千美元)number(中文(简体) )supportsAnyRegionAndSize(单位:千美元)boolean(中文(简体) )
Region
字段
height(单位:千美元)number(中文(简体) )width(单位:千美元)number(中文(简体) )x(单位:千美元)number(中文(简体) )y(单位:千美元)number(中文(简体) )
Size
两个数字表示 Bbox 的大小为 [宽,高] 或 [xSize, ySize] ([number, number]) (中文(简体) ).
或者,两个数字表示数字的最小和最大,例如:
或者,两个数字表示矩阵的尺寸:行,相(这是不同的手性!)
TileZoomLevel
字段
columns(单位:千美元)number(中文(简体) )height(单位:千美元)number(中文(简体) )originalHeight(单位:千美元)number(中文(简体) )originalWidth(单位:千美元)number(中文(简体) )rows(单位:千美元)number(中文(简体) )scaleFactor(单位:千美元)number(中文(简体) )width(单位:千美元)number(中文(简体) )
Tileset
类型
{
width: number
height?: number | undefined
scaleFactors: Array<number>
}