Fix mess with canvas name for HSI

This commit is contained in:
Nicolò P 2025-03-12 18:12:49 +01:00
parent dccec35f77
commit 00c72fd17b
3 changed files with 36 additions and 9 deletions

View File

@ -16,8 +16,12 @@ export default async function generateCanvas(manifestId, name) {
const canvas = new Canvas(IIIF_API_VERSION, BASE_URL); const canvas = new Canvas(IIIF_API_VERSION, BASE_URL);
const manifest = new Manifest(IIIF_API_VERSION, BASE_URL); const manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
manifest.generateID(manifestId); manifest.generateID(manifestId);
canvas.generateID(manifestId, name); canvas.generateID(manifestId, name);
let filename = await Common.getImageName(canvas)
console.log('Filename: ' + filename);
let label = name let label = name
.replace(/c(\w{1,2})0+(\d+).*(\.\w{2,3})?$/i, function (str, c, number) { .replace(/c(\w{1,2})0+(\d+).*(\.\w{2,3})?$/i, function (str, c, number) {
return `C${c}. ${number}`; return `C${c}. ${number}`;
@ -28,8 +32,8 @@ export default async function generateCanvas(manifestId, name) {
} }
canvas.label = label; canvas.label = label;
const image = new Image(canvas.id); const image = new Image(canvas.id, filename);
image.generateID(process.env.IMAGE_SERVER_URL, await Common.getImageName(canvas)); image.generateID(process.env.IMAGE_SERVER_URL, filename);
const imgSize = await Common.getImageSize(image.id); const imgSize = await Common.getImageSize(image.id);
image.setSize(imgSize.height, imgSize.width); image.setSize(imgSize.height, imgSize.width);
@ -41,5 +45,11 @@ export default async function generateCanvas(manifestId, name) {
canvas.addImage(image); canvas.addImage(image);
return canvas.toObject(); return canvas.toObject();
/**
const manifest = new Manifest(IIIF_API_VERSION, BASE_URL);
manifest.generateID(manifestId);
return Common.createCanvas(manifest, name, manifestId).toObject();
*/
} }

View File

@ -31,7 +31,8 @@ router.get('/iiif/:manifestid/canvas/:name', async function(req, res) {
try { try {
canvas = await generateCanvas(req.params.manifestid, req.params.name) canvas = await generateCanvas(req.params.manifestid, req.params.name)
} catch(error) { } catch(error) {
res.status(500).json({status: 500, message: 'There was an error processing this request'}); res.status(500).json({status: 500, message: 'There was an error processing this request: ' + error});
return;
} }
res.json(canvas); res.json(canvas);
}); });

View File

@ -144,13 +144,28 @@ Common.getImageSize = async function (imageId) {
} }
/** /**
* Get image name for given canvas * Get image name for given canvas
* @todo Use regex in filter!!
* @param {Canvas} canvas * @param {Canvas} canvas
* @returns {string} * @returns {string}
*/ */
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]; let name = canvas.name;
// Adjust canvas name for HSI with PCA...
if (/pc(1|3)/.test(name)) {
name = name.replace(
/pc((1|3))/,
function (match, group1) {
return `_HSI_PC${group1}`;
}
);
}
console.log('Canvas name: ' + name);
return images.filter(i => i.includes(name))[0];
} }
/** /**
* Create a canvas from an image filename * Create a canvas from an image filename
@ -172,10 +187,9 @@ Common.createCanvas = async function (manifest, filename) {
dn: 2 dn: 2
}; };
const canvasName = filename.split('_')[namePos[manifest.technique]] let canvasName = filename.split('_')[namePos[manifest.technique]]
.replace(/\.\w{1,3}$/, ''); .replace(/\.\w{1,3}$/, '');
canvas.generateID(manifest.resourceId, canvasName);
let label = canvasName let label = canvasName
.replace(/c(\w{1,2})0+(\d+).*(\.\w{2,3})?$/i, function (str, c, number) { .replace(/c(\w{1,2})0+(\d+).*(\.\w{2,3})?$/i, function (str, c, number) {
return `C${c}. ${number}`; return `C${c}. ${number}`;
@ -183,8 +197,10 @@ Common.createCanvas = async function (manifest, filename) {
// Add PCA to canvas label for HSI images // Add PCA to canvas label for HSI images
if (manifest.technique === 'hsi') { if (manifest.technique === 'hsi') {
label += ` ${filename.split('_')[3].replace(/\..*$/,'')}`; label += ` ${filename.split('_')[3].replace(/\..*$/,'')}`;
canvasName += `${filename.split('_')[3].replace(/\..*$/,'')}`;
} }
canvas.generateID(manifest.resourceId, canvasName.toLowerCase());
canvas.label = label; canvas.label = label;
let image = new Image(canvas.id); let image = new Image(canvas.id);