Per esigenze lavorative ho dovuto utilizzare un image server, capace di effettuare trasformazione di immagini a runtime per adattare le immagini a qualsiasi dispositivo. La scelta è caduta su Cantaloupe, un image server scritto in java compliant con le API IIIF, che definiscono un interfaccia di servizi da invocare per effettuare le principali operazioni sulle immagini. Installare e avviare Cantaloupe è molto semplice, è sufficiente scaricare dalla homepage il file zip contenente i binari, scompattare e lanciare l’eseguibile non prima di aver creato il file di configurazione nella stessa cartella. Per la mia installazione ho usato Cantaloupe v. 3.3.5 e per avviare il server ho usato la direttiva
1 |
java -Dcantaloupe.config=cantaloupe.properties -Xmx2g -jar Cantaloupe-3.3.5.war |
La configurazione di default prevede che il server stia in ascolto sulla porta 8182, pertanto se avete fatto tutto correttamente accedendo al link http://localhost:8182/ comparirà la nostra home page, ovvero una bella fetta di cantalupo indicante la versione corrente.
A questo punto attiviamo il pannello di amministrazione. Per farlo accediamo al file di configurazione e attiviamo tramite la sezione
1 2 3 4 |
# Enables the Control Panel, at /admin. admin.enabled = true # Password to access the Control Panel. (The username is "admin".) admin.password = admin |
Nel mio caso ho scelto admin come password, riavviamo e accediamo al link http://localhost:8182/admin, inseriamo i dati accesso ed ecco il nostro pannello
Per le informazioni sulle varie funzionalità a disposizione rimando al manuale, soffermiaci su 2 schede in particolare: resolvers e processors. I processors sono gli oggetti che effettuano le trasformazioni sulle immagini e sono legate ai formati che dobbiamo gestire e gli standard supportati sono rappresentati nella scheda in una comodo tabella. La configurazione di default prevede l’uso di java2dprocessor, ma siamo liberi di fare quello che vogliamo.
I resolvers sono gli oggetti che a partire da un identificativo alfanumerico sono in grado di recuperare l’immagini. Sono presenti vari tipi, ma quello di default è il FilesystemResolver che a partire da una directory recupera l’immagine grazie al nome
Se voglio ottenere i metadati di una immagine occorre invocare l’url
1 |
http://localhost:8182/iiif/2/0001_2.jpg/info.json |
dove 0001_2.jpg è il nome del file. Con tale direttiva ottengo i metadati del file in formato json
1 |
{"@context":"http://iiif.io/api/image/2/context.json","@id":"http://localhost:8182/iiif/2/0001_2.jpg","protocol":"http://iiif.io/api/image","width":9638,"height":10783,"sizes":[{"width":75,"height":84},{"width":151,"height":168},{"width":301,"height":337},{"width":602,"height":674},{"width":1205,"height":1348},{"width":2410,"height":2696},{"width":4819,"height":5392}],"tiles":[{"width":1205,"height":1348,"scaleFactors":[1,2,4,8,16,32,64,128]}],"profile":["http://iiif.io/api/image/2/level2.json",{"formats":["jpg","tif","gif","png"],"maxArea":400000000,"qualities":["bitonal","default","gray","color"],"supports":["regionByPx","sizeByW","sizeByWhListed","cors","regionSquare","sizeByDistortedWh","sizeAboveFull","canonicalLinkHeader","sizeByConfinedWh","sizeByPct","jsonldMediaType","regionByPct","rotationArbitrary","sizeByH","baseUriRedirect","rotationBy90s","profileLinkHeader","sizeByForcedWh","sizeByWh","mirroring"]}]} |
Per ottenere l’immagine originale il link da invocare è il seguente
1 |
http://localhost:8182/iiif/2/0001_2.jpg/full/full/0/default.jpg |
Per ottenere le varie derivate occorre variare i parametri che seguono l’identificativo del file nel rispetto delle api IIIF, per maggiori dettagli leggete le specifiche disponibili qui