Annexe 1 – Omeka S ImageServer et les tuiles

La présente annexe mélange des données théoriques ainsi que des résultats de tests pour affiner la compréhension du module Image Server.

Que fait le module Image Server ?

Le module Image server effectue deux opérations liées mais distinctes: 1) Il implémente l’API Image IIIF, au sens où il sait répondre aux requêtes du type : * modèle d’URL: {scheme}://{server{/prefix}/{identifier}/{region}/{size}/{rotation}/{quality}.{format} * exemple : https://api.nakala.fr/iiif/10.34847/nkl.8e31p9d2/014f975b5550100f7a5b977ae409d4c51f3ae263/full/full/0/default.jpg

  1. Il effectue des traitements sur les images pour optimiser ou transformer les images qu’il envoie lorsqu’il répond à une requête API Image IIIF. Parmi ces traitements, un des plus importants est le tuilage.

Qu’est ce que l’opération de tuilage ?

 IIPImage

Le tuilage consiste à découper une image de grande taille en de plus petites images (appelées tuiles) qui seront affichées uniquement lorsque le niveau de zoom requis le nécessitera. Cela permet d’optimiser le temps de chargement des images ainsi que de minimiser les données transférées entre un serveur web hébergeant les images et le navigateur web d’un utilisateur.

Tuilage dynamique vs tuilage statique

Cette opération peut s’effectuer selon deux modes:

  • dynamique : les tuiles sont générées au moment où la requête de zoom est demandée par le navigateur. Cela évite de stocker un nombre de tuiles important sur le disque d’un serveur via un travail de prégénération de tuiles.

  • statique : les tuiles sont générées en amont de l’affichage et stockées directement sur le serveur. Plusieurs formats de tuiles existent parmi lesquels : DZI (DeepZoom), Zoomify, Tiled Tiff, JPEG 2000. Les deux premiers formats (DZI et Zoomify) créent et organisent les tuiles à l’intérieur de répertoires quand les deux autres les encapsulent dans un seul fichier (JPEG 2000 et Tiled Tiff).

Pour ces deux derniers formats, l’embarquement des tuiles dans un seul fichier devrait améliorer grandement les temps d’affichage des images de grande taille, mais cela demande d’utiliser des logiciels qui soient capables de lire les tuiles à l’intérieur de ces fichiers au gré des demandes effectuées via le visualiseur IIIF (Openseadragon, Mirador, etc.). Cela ne semble pas être le cas avec le module Image Server qui, d’après les tests que nous avons effectués, génère dynamiquement les tuiles à partir de ces deux formats tuilés Tiled Tiff et JPEG 2000. Pour de grandes images et des ressources serveur limitées, le résultat est bien plus lent qu’avec des tuiles statiques en format DeepZoom.

A notre connaissance, le module Image Server génère des tuiles statiques uniquement pour les formats DeepZoom et Zoomify et uniquement pour les besoins standards de zoom sur une image. En revanche, il utilise le tuilage dynamique pour des requêtes IIIF de modifications d’images (rotation, transformation N&B, sélection de régions spécifiques) qui ne peuvent être anticipées en amont. Cela permet d’équilibrer vitesse d’affichage (avec tuiles prégénérées) et souplesse fonctionelle (génération de tuiles dynamiques uniquement quand c’est néecssaire). Comme expliqué au dessus, le module semble aussi générer dynamiquement les tuiles lors de l’utilisation de fichiers prétuilés JPEG 2000 et Tiled Tiff, même pour un zoom “normal”, ce qui peut avoir un impact significatif sur les performances.

Tests de différentes configurations du module Image Server

Première observation en effectuant les tests: avec PHP7.4, le tuilage ne s’effectuait pas sur notre serveur mais il n’y avait aucun message d’erreur relatif à la version de PHP qui permettait de le comprendre. En basculant à PHP8.1 le tuilage fonctionne.

Bonne nouvelle, même dans un cas d’usage où le tuilage ne s’effectue pas, les images peuvent tout de même s’afficher en IIIF via le module Image Server grâce à des mesures de contournement prévues par le module en cas d’absence de tuiles. On peut voir et configurer ces mesures dans les paramètres généraux d’Omeka-S rubrique Image Server:

Processeurs d’image

Les tests ont été effectués sur Ubuntu 24.04.

Le processeur d’image Vips a été installé préalablement aux tests qui suivent.

Sur un système comme Ubuntu son installation est très simple:

sudo apt install libvips
sudo apt install libvips-tools

Idem pour le processeur Image Magick :

sudo apt install imagemagick

Configuration avec un format de tuilage JPEG 2000

Le format de tuilage sélectionné, ici JPEG 2000, est utilisé quel que soit le format initial du fichier image. Dans les exemples ci-dessous les format de fichiers images associés à mon item de test dans Omeka S sont JPG, PNG, JP2. Le fait d’associer des images JPEG 2000 ou Tiled Tiff à un item Omeka S n’empêchera donc pas le module de générer ses propres fichiers de tuiles embarquées JPEG 2000 et Tiled Tiff.

Si le paramètre create tiles automatically est coché et si vous modifiez le format de tuilage dans la configuration du module, l’opération de génération du nouveau format de tuilage sera déclenchée à la prochaine modification d’un item, qu’il s’agisse de charger un nouveau média ou bien seulement de modifier une métadonnée. Cela peut donc avoir un effet non négligeable sur les ressources serveurs lors de modifications d’items en lots.

Une fois les tuiles générées, on observe bien dans le répertoire /files/tile les fichiers JPEG 2000 générés:

Avec un format de tuilage Tiled tiff

Comme indiqué précédemment, le format configuré ayant été modifié, lors de la modification d’un item, les medias associés sont tuilés sous forme de Tiled Tiff.

La génération automatique des tuiles ne permet pas de préciser si on souhaite effacer ou non les tuiles d’un autre format déjà présentes. On peut donc observer un doublon dans les fichiers de tuiles présents dans le répertoire tile. Nous avons en effet un fichier .jp2 et un fichier .tif pour une même image originale. Conserver plusieurs formats prend de la place. Il peut donc être utile de nettoyer le répertoire /files/tile lorsque vous observez ce type de “doublons” lorque vous passez en production.

Fonctionnalité à manier avec précautions!! Il est possible de supprimer les tuiles déjà générées avant d’en créer de nouvelles, via l’onglet de configuration Bulk prepare tiles and sizes du module Image Server. Pour ce faire, il suffit de cocher Remove tiles and associated metadata puis de cliquer sur Process. Si vous ne remplissez pas le champ query toutes les tuiles associées à l’ensemble de vos images seront supprimées. Il est possible de réduire le scope de suppression par exemple en sélectionnant uniquement les tuiles liées à l’item d’id 1 via la requête id=1.

De même, les fichiers Tiled Tiff générées sont plus volumineux que les fichiers JPEG 2000. Il peut donc être intéressant de préférer ce dernier format au détriment du Tiled Tiff qui est plus lourd.

Il est important de déterminer le contexte d’implémentation afin de choisir le format de tuilage le plus judicieux pour votre usage. Par exemple, comme expliqué plus haut, les tests effectués sur notre serveur ont révélé de mauvaises performances avec les formats de tuile JPEG 2000 et Tiled Tiff pour afficher des images volumineuses (> 100Mo). Dans notre cas de test, le format le plus rapide est sans conteste DeepZoom.

Avec un format de tuilage DeepZoom

Comme indiqué plus haut, DeepZoom a montré de meilleures performances dans les conditions de ressources machines que nous avons à disposition. Nous ne testerons pas l’autre format de tuiles statiques Zoomify car il est déconseillé par le développeur du module et semble avoir été conservé pour des raisons historiques liées au développement du module.

Un format DeepZoom est constitué de 2 parties: - Un répertoire qui accueille toutes les tuiles liées au même média - Un fichier en .dzi qui décrit la taille de chaque tuile et le format de fichier image des tuiles tel que décrit par la documentation de Deepzoom. Par exemple:

Dans le répertoire, les tuiles sont organisées par niveau de zoom (de 0 à 13 ci-dessous):

le fichier vips-properties.xml, qui est situé dans le répertoire des tuiles, contient les métadonnées techniques de l’image originale. Il est généré automatiquement par Vips.