Afficher un Tif dans un navigateur
L’autre jour j’ai eu la problématique suivante : comment afficher un Tif dans un navigateur web ?
Le problème est que les navigateurs respectent (en tout cas essayent) les normes du W3C et donc ne savent afficher que les Jpeg, les Gif et les Png (et encore, IE a du mal). Voici une solution :
L’idée est de lire un fichier Tif, le convertir en autre chose de lisible par le navigateur et enfin d’écrire cet autre chose dans le stream de réponse du serveur. Evidement, la solution que je propose est en Java.
Je me suis inspiré de ce TechTip (comment ça, encore?).
Etape 1 : JSP
On commence par la jsp d’appel :
<a href="/servlet/tiffServlet?url=<%= tifEncodedUrl %>" >toto.tif</a> |
Etape 2: les imports
Je n’ai mis que les plus importants
import java.awt.Canvas; |
Etape 3 : lire un fichier Tif
Pour ce faire, je me suis appuyer sur la librairie Tiff de Lizzard Works.
// hop, on récupère le paramètre depuis la jsp |
Ici, j’ai choisi d’aller chercher un Tif distant. Rien n’empèche de récupérer un stream sur un resource locale.
Etape 4 : Convertir le fichier Tif en Png
C’est là que réside l’astuce. Même si on est en environnement Servlet, on a accès aux bibliothèques Swing et Awt de la JVM ;-)
// Objet Image d'awt |
Etape 5 : tout le monde est content
Rien n’empèche d’ajouter du LightBox dans la jsp, en tout cas, on va chercher un Tif et le navigateur affiche un Png. Magique non?
Voici mes sources :
Solutions modernes (2024)
1. Conversion avec ImageMagick
La manière la plus simple aujourd’hui :
convert input.tif output.png |
2. Bibliothèque JavaScript tiff.js
tiff.js permet de décoder et afficher des TIFF côté client, sans serveur :
const Tiff = require('tiff.js'); |
3. Conversion streamée avec Sharp (Node.js)
Sharp est la librairie de référence pour le traitement d’images en Node.js :
const sharp = require('sharp'); |
4. Support navigateur pour TIFF
En 2024, aucun navigateur ne supporte nativement le TIFF. La solution reste la conversion côté serveur ou l’utilisation de wasm côté client. Les formats WebP et AVIF sont les alternatives modernes recommandées pour l’archivage d’images sur le web.