Images temporaires, images permanentes et fichiers de contrôle

Les filtres de traitements d’image créent pour arriver au résultat souhaité des images intermédiaires si plusieurs filtres d’images sont enchaînés. Seule la dernière image est conservée. Cet article explique le principe de ce fonctionnement qui s’appuie sur les fichiers de contrôle (.src) pour chaque filtre d’image effectué sur une image.

Lorsqu’une image « toto.png » est créée par un filtre, un fichier de contrôle « toto.png.src » lui est associé. Ce fichier contient les infos nécessaires à la re-création de l’image si nécessaire (image source, fonction et arguments appelés).

Une image qui possède un fichier de contrôle est considérée comme temporaire et peut être supprimée du process.

Une image qui ne possède pas de fichier de contrôle est une image gravée, permanente.

lorsqu’une série de filtres contient au moins un filtre image, le compilateur la termine par le filtre image_graver.

dans un enchaînement de filtres, si une image intermédiaire est absente mais son fichier de contrôle présent, on ne fait rien tant qu’on n’a pas besoin de créer explicitement l’image cible.

Dans la plupart des cas, la série de filtres se finit sur l’image cible qui a été gravée par le filtre image_graver, et qui est là.
Si par contre on a besoin de créer une nouvelle image sur la base d’une image intermédiaire absente, on remonte la chaîne des fichiers de contrôle pour recréer chaque image intermédiaire à partir de l’image source originale.

Le filtre image_graver supprime le fichier de contrôle de l’image cible, et remonte la chaîne des fichiers de contrôle pour supprimer les images temporaires (mais laisse les fichiers de contrôle permettant de les reconstruire).

Dans un double traitement du style :

[(#TEXTE|image_reduire{520,0}
        |image_reduire{150}
        |image_rotation{90}
        |image_recadre{200,200,'center','red'}
        |image_aplatir{jpg}
)]
[(#TEXTE|image_reduire{520,0}
        |image_reduire{150}
        |image_rotation{-90}
        |image_recadre{200,200,'center','red'}
        |image_aplatir{jpg}
)]

La première série de filtres conduit à la création d’une image jpg et toutes les images intermédiaires sont supprimées
Dans la deuxième série de filtres, les deux premiers filtres image_reduire ne font rien car les fichiers de contrôle sont là. Au moment de calculer le image_rotation, on s’aperçoit qu’il nous les faut. On reconstruit donc les deux images intermédiaires, et celle qui a manqué (la deuxième) est gravée car on sait qu’elle est commune à plusieurs séries.

Le gravage automatique de l’image intermédiaire évite un recalcul systématique pour cause de dates a chaque hit.

Une écriture optimisée serait bien entendu d’appliquer les filtres communs une seule fois et de stocker le résultat avec #SET.