Actuellement le système de génération du cache (glide) des images argentique fait qu'on perd toutes les données exif sur les photos affichées. Y compris la date de prise de photo, donc quand les photos sont téléchargées, elles sont classées n'importe comment par les logiciels de galerie (typiquement sur smartphone). Et il n'y a actuellement aucun moyen de récupérer cette information du point de vue de l'utilisateur final.
Etape 1 : Passer à Imagick
La première chose à faire c'est de passer le driver de Glide depuis gd (valeur par défaut) à imagick. gd est en effet incapable de sauvegarder une image avec des données exif, donc peu importe ce qu'on fait il les effacera. Il est possible qu'on ait une différence de performance, mais je ne l'ai pas mesuré. Cependant on reste sur une implé compilées donc ça devrait pas être trop violent non plus je pense.
Les deux driver sont présent dans l'image docker larueli/php-base-image, donc si c'est bien celle là qui est utilisé sur la prod, il n'y aura pas de soucis.
Etape 2 : Eviter de re-créer l'image quand ce n'est pas nécéssaire
Je viens ensuite hériter le ManipulatorEncode parce qu'il vient re-créer l'image de zero pour ajouter un fond blanc alors que ça n'a d'interet que lorsque le format d'image source support le transparent. Ce qui n'est pas le cas la plupart du temps pour nous (les photos sont généralement en jpg qui ne supporte pas la transparence). Le fait de re-créer l'image nous faisait perdre les données exif en plus d'avoir probablement un cout en mémoire supplémentaire pour rien.
Une fois la classe Manipulator héritée, on fait hérite ServerFactory pour nous permettre d'utiliser notre nouveau Manipulator. Au passage j'enlève tous les autres Manipulators dont on ne se sert pas.
Les nouvelles images de cache créées auront maintenant leurs données exif conservées. Cependant ça ne sera pas le cas sur les anciennes images pour lesquels nous avons déjà un cache.
Etape 3 : Ajouter une option sur le warmup de cache pour supprimer les anciennes images
Il faudra donc lancer la commande suivante en prod une fois déployé
./bin/console etu:argentique:warmup -f
Notes
J'aurais bien aimé ajouter quelques tests, mais de ce que je vois ils sont pas executés et phpunit semble pas installé ? Donc j'ai même pas pu lancer les existants. Si les tests sont actuellement run et que j'ai pas vu, dites moi, j'en rajouterais.
Objectif
Actuellement le système de génération du cache (glide) des images argentique fait qu'on perd toutes les données exif sur les photos affichées. Y compris la date de prise de photo, donc quand les photos sont téléchargées, elles sont classées n'importe comment par les logiciels de galerie (typiquement sur smartphone). Et il n'y a actuellement aucun moyen de récupérer cette information du point de vue de l'utilisateur final.
Etape 1 : Passer à Imagick
La première chose à faire c'est de passer le driver de Glide depuis
gd
(valeur par défaut) àimagick
.gd
est en effet incapable de sauvegarder une image avec des données exif, donc peu importe ce qu'on fait il les effacera. Il est possible qu'on ait une différence de performance, mais je ne l'ai pas mesuré. Cependant on reste sur une implé compilées donc ça devrait pas être trop violent non plus je pense.Les deux driver sont présent dans l'image docker
larueli/php-base-image
, donc si c'est bien celle là qui est utilisé sur la prod, il n'y aura pas de soucis.Etape 2 : Eviter de re-créer l'image quand ce n'est pas nécéssaire
Je viens ensuite hériter le
Manipulator
Encode
parce qu'il vient re-créer l'image de zero pour ajouter un fond blanc alors que ça n'a d'interet que lorsque le format d'image source support le transparent. Ce qui n'est pas le cas la plupart du temps pour nous (les photos sont généralement en jpg qui ne supporte pas la transparence). Le fait de re-créer l'image nous faisait perdre les données exif en plus d'avoir probablement un cout en mémoire supplémentaire pour rien.Une fois la classe
Manipulator
héritée, on fait hériteServerFactory
pour nous permettre d'utiliser notre nouveauManipulator
. Au passage j'enlève tous les autresManipulator
s dont on ne se sert pas.Les nouvelles images de cache créées auront maintenant leurs données exif conservées. Cependant ça ne sera pas le cas sur les anciennes images pour lesquels nous avons déjà un cache.
Etape 3 : Ajouter une option sur le warmup de cache pour supprimer les anciennes images
Il faudra donc lancer la commande suivante en prod une fois déployé
Notes
J'aurais bien aimé ajouter quelques tests, mais de ce que je vois ils sont pas executés et phpunit semble pas installé ? Donc j'ai même pas pu lancer les existants. Si les tests sont actuellement run et que j'ai pas vu, dites moi, j'en rajouterais.