Generate images based on technique - WIP
This commit is contained in:
parent
6910b9e14a
commit
735c02f9c7
32
src/Image.js
32
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.*$/,'');
|
||||
|
@ -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,29 +65,34 @@ 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];
|
||||
}
|
||||
/**
|
||||
* @param {Manifest} manifest The manifest object
|
||||
* @param {string[]} images List of image filenames from folder
|
||||
* @returns {Manifest}
|
||||
* Create a canvas from an image filename
|
||||
* @param {Manifest} manifest
|
||||
* @param {string} filename The image filename
|
||||
* @returns
|
||||
*/
|
||||
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);
|
||||
// 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}$/,'');
|
||||
|
||||
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 = `${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);
|
||||
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);
|
||||
image.setSize(imgSize.height, imgSize.width);
|
||||
|
||||
@ -85,8 +101,22 @@ Common.populateCanvases = async function (manifest, images) {
|
||||
imgSize.thumb.width,
|
||||
image.id
|
||||
);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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;
|
Loading…
Reference in New Issue
Block a user