Generate images based on technique - WIP

This commit is contained in:
Nicolò P 2023-10-30 17:34:11 +01:00
parent 6910b9e14a
commit 735c02f9c7
2 changed files with 91 additions and 25 deletions

View File

@ -1,4 +1,29 @@
import IIIFResource from './IIIFResource.js'; 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 * @implements IIIFResource
*/ */
@ -35,13 +60,14 @@ class Image {
/** /**
* Generate IIIF id pointing to image * Generate IIIF id pointing to image
* server endpoint for this image * server endpoint for this image
* @todo Warning! Only works for NIR filenames...
* @param {string} serviceURL The image server base URL * @param {string} serviceURL The image server base URL
* @param {string} filename The image's complete filename * @param {string} filename The image's complete filename
*/ */
generateID(serviceURL, filename) { generateID(serviceURL, filename) {
let splitFilename = filename.split('_'); let splitFn = splitter[/(NIR|DO|DN|HSI)/.exec(filename)[0]];
const baseFolder = splitFilename.slice(0,2).join('_');
const subfolder = splitFilename.slice(0,3).join('_'); const {baseFolder, subfolder} = splitFn(filename);
this.id = `${serviceURL}/2/${baseFolder}%2F${subfolder}%2F${filename}/full/full/0/default.jpg`; this.id = `${serviceURL}/2/${baseFolder}%2F${subfolder}%2F${filename}/full/full/0/default.jpg`;
this.service['@id'] = this.id.replace(/\/full.*$/,''); this.service['@id'] = this.id.replace(/\/full.*$/,'');

View File

@ -1,11 +1,22 @@
'use strict';
import * as fs from 'fs'; import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import Manifest from './Manifest.js'; import Manifest from './Manifest.js';
import Sequence from './Sequence.js'; import Sequence from './Sequence.js';
import Canvas from './Canvas.js'; import Canvas from './Canvas.js';
import Image from './Image.js'; import Image from './Image.js';
import ManifestMetadata from './Metadata.js';
const Common = {}; 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 * @param {string} manifestId
*/ */
@ -54,29 +65,34 @@ Common.getImageSize = async function (imageId) {
Common.getImageName = async function (canvas) { Common.getImageName = async function (canvas) {
const images = await this.getImageList(canvas.resourceId); 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];
} }
/** /**
* @param {Manifest} manifest The manifest object * Create a canvas from an image filename
* @param {string[]} images List of image filenames from folder * @param {Manifest} manifest
* @returns {Manifest} * @param {string} filename The image filename
* @returns
*/ */
Common.populateCanvases = async function (manifest, images) { Common.createCanvas = async function (manifest, filename) {
const IIIF_API_VERSION = process.env.IIIF_API_VERSION; let canvas = new Canvas(
const BASE_URL = process.env.BASE_URL; process.env.IIIF_API_VERSION,
const sequence = new Sequence(BASE_URL); process.env.BASE_URL
// There's only one sequence );
sequence.generateID(manifest.resourceId, 0); const canvasName = filename.split('_')[1];
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.generateID(manifest.resourceId, canvasName);
canvas.label = `${manifest.resourceId}-${canvasName.toLowerCase()}`; canvas.label = canvasName
.replace(/c(\w+)0+(\d+)/, function (str, c, number) {
return `C${c}. ${number}`;
});
let image = new Image(canvas.id); let image = new Image(canvas.id);
image.generateID(process.env.IMAGE_SERVER_URL, img); image.generateID(process.env.IMAGE_SERVER_URL, filename);
// DEBUG
console.log(image.id);
const imgSize = await this.getImageSize(image.id); const imgSize = await this.getImageSize(image.id);
image.setSize(imgSize.height, imgSize.width); image.setSize(imgSize.height, imgSize.width);
@ -85,8 +101,22 @@ Common.populateCanvases = async function (manifest, images) {
imgSize.thumb.width, imgSize.thumb.width,
image.id image.id
); );
canvas.addImage(image); canvas.addImage(image);
return canvas;
}
/**
* @param {Manifest} manifest The manifest object
* @param {string[]} images List of image filenames from folder
* @returns {Manifest}
*/
Common.populateCanvases = async function (manifest, images) {
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 = await this.createCanvas(manifest, img);
sequence.addCanvas(canvas); sequence.addCanvas(canvas);
} }
@ -94,5 +124,15 @@ Common.populateCanvases = async function (manifest, images) {
return manifest; 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; export default Common;