diff --git a/src/Image.js b/src/Image.js index 2d04f88..821b5d4 100644 --- a/src/Image.js +++ b/src/Image.js @@ -1,4 +1,29 @@ import IIIFResource from './IIIFResource.js'; + +const splitter = { + NIR: splitNIR, + DN: splitDNO, + DO: splitDNO, + //HSI: splitHSI +}; + +function splitNIR(filename) { + let splitFilename = filename.split('_'); + const papyrusNumb = splitFilename[0].split('-')[2]; + const baseFolder = `PHerc_${papyrusNumb}`; + const subfolder = `PHerc_${papyrusNumb}_${splitFilename[2].split('-')[0]}`; + + return {baseFolder, subfolder}; +} + +function splitDNO(filename) { + let splitFilename = filename.split('_'); + const baseFolder = splitFilename.slice(0,2).join('_'); + const subfolder = splitFilename.slice(0,3).join('_'); + + return {baseFolder, subfolder}; +} + /** * @implements IIIFResource */ @@ -35,13 +60,14 @@ class Image { /** * Generate IIIF id pointing to image * server endpoint for this image + * @todo Warning! Only works for NIR filenames... * @param {string} serviceURL The image server base URL * @param {string} filename The image's complete filename */ generateID(serviceURL, filename) { - let splitFilename = filename.split('_'); - const baseFolder = splitFilename.slice(0,2).join('_'); - const subfolder = splitFilename.slice(0,3).join('_'); + let splitFn = splitter[/(NIR|DO|DN|HSI)/.exec(filename)[0]]; + + const {baseFolder, subfolder} = splitFn(filename); this.id = `${serviceURL}/2/${baseFolder}%2F${subfolder}%2F${filename}/full/full/0/default.jpg`; this.service['@id'] = this.id.replace(/\/full.*$/,''); diff --git a/src/common.js b/src/common.js index 27d518e..0a1d850 100644 --- a/src/common.js +++ b/src/common.js @@ -1,11 +1,22 @@ +'use strict'; + import * as fs from 'fs'; import * as path from 'path'; import Manifest from './Manifest.js'; import Sequence from './Sequence.js'; import Canvas from './Canvas.js'; import Image from './Image.js'; +import ManifestMetadata from './Metadata.js'; const Common = {}; +const TECH_NAMES = { + dn: "Disegni Napoletani", + do: "Disegni Oxoniensi", + nir: "Technical Photography NIR", + hsi: "Hyperspectral Imaging", + uvf: "Technical Photography UVF", +} + /** * @param {string} manifestId */ @@ -54,7 +65,45 @@ Common.getImageSize = async function (imageId) { Common.getImageName = async function (canvas) { const images = await this.getImageList(canvas.resourceId); - return images.filter(i => i.includes(canvas.name))[0]; + return images.filter( + i => i.includes(canvas.name) + )[0]; +} +/** + * Create a canvas from an image filename + * @param {Manifest} manifest + * @param {string} filename The image filename + * @returns + */ +Common.createCanvas = async function (manifest, filename) { + let canvas = new Canvas( + process.env.IIIF_API_VERSION, + process.env.BASE_URL + ); + const canvasName = filename.split('_')[1]; + canvas.generateID(manifest.resourceId, canvasName); + canvas.label = canvasName + .replace(/c(\w+)0+(\d+)/, function (str, c, number) { + return `C${c}. ${number}`; + }); + + let image = new Image(canvas.id); + image.generateID(process.env.IMAGE_SERVER_URL, filename); + + // DEBUG + console.log(image.id); + + const imgSize = await this.getImageSize(image.id); + image.setSize(imgSize.height, imgSize.width); + + canvas.setThumbnail( + imgSize.thumb.height, + imgSize.thumb.width, + image.id + ); + canvas.addImage(image); + + return canvas; } /** * @param {Manifest} manifest The manifest object @@ -62,31 +111,12 @@ Common.getImageName = async function (canvas) { * @returns {Manifest} */ Common.populateCanvases = async function (manifest, images) { - const IIIF_API_VERSION = process.env.IIIF_API_VERSION; - const BASE_URL = process.env.BASE_URL; - const sequence = new Sequence(BASE_URL); + const sequence = new Sequence(process.env.BASE_URL); // There's only one sequence sequence.generateID(manifest.resourceId, 0); for (let img of images) { - let canvas = new Canvas(IIIF_API_VERSION, BASE_URL); - const canvasName = img.split('_')[3].replace(/\.[\w\d]{2,3}$/,''); - - canvas.generateID(manifest.resourceId, canvasName); - canvas.label = `${manifest.resourceId}-${canvasName.toLowerCase()}`; - - let image = new Image(canvas.id); - image.generateID(process.env.IMAGE_SERVER_URL, img); - const imgSize = await this.getImageSize(image.id); - image.setSize(imgSize.height, imgSize.width); - - canvas.setThumbnail( - imgSize.thumb.height, - imgSize.thumb.width, - image.id - ); - - canvas.addImage(image); + let canvas = await this.createCanvas(manifest, img); sequence.addCanvas(canvas); } @@ -94,5 +124,15 @@ Common.populateCanvases = async function (manifest, images) { return manifest; } +/** + * @todo Implement... + * @param {string} imageName The image filename + * @returns {ManifestMetadata} + */ +Common.createMetadata = function (imageName) { + let metadata = {}; + + return new ManifestMetadata(metadata); +} export default Common; \ No newline at end of file