HEIC Uploads : quand l’iPhone envahit vos forums

Depuis quelques mois, un phénomène silencieux dégradait mes communautés Invision Community : des photos qui ne s’affichaient plus. Le membre téléverse sa photo, tout semble se passer normalement, et à la publication… un lien de téléchargement inutilisable apparaît à la place de l’image. Sur un forum où l’on partage des photos, c’est un défaut que l’on croise tous les jours.

Le coupable a un nom : HEIC.

Le format que personne n’affiche

Depuis l’iPhone 7 et iOS 11, Apple photographie par défaut en HEIC, un conteneur HEIF avec compression HEVC. Le format est techniquement excellent : à qualité égale, il pèse deux fois moins qu’un JPEG. Mais à l’heure où j’écris ces lignes, un fichier .heic ne peut être affiché dans pratiquement aucun navigateur. Exception faite de Safari, évidemment.

Apple connaît les lubies d’Apple. On retrouve là le mécanisme que je décrivais dans Mon smartphone, leur dictature : le confort règne tant que l’on reste dans le jardin clos, et la moindre sortie du chemin balisé se paie comptant. Quand un utilisateur téléverse une photo directement depuis Safari sur son iPhone, le navigateur effectue une conversion vers .jpg à la volée, et personne ne s’aperçoit de rien. Le problème surgit dès que l’on sort de ce chemin balisé : le membre transfère ses photos .heic sur son ordinateur, puis les téléverse depuis Firefox ou Chrome. Le fichier arrive tel quel sur le serveur, dans un format que ni le navigateur ni le forum ne savent afficher.

Le résultat, pour l’administrateur, ressemble beaucoup à ce que je racontais à propos des uploads massifs sous Gutenberg : un flux d’images qui devrait être trivial, et qui devient une source d’incidents quotidiens.

Côté Invision Community 5, le diagnostic est simple : \IPS\Image::create() identifie les images par leurs octets magiques, et ne reconnaît ni HEIC ni HEIF. Le fichier est donc stocké comme une pièce jointe quelconque, pas comme une image. D’où le lien de téléchargement.

Le réglage que je refusais d’imposer

Il existe bien une parade côté iPhone : Réglages, Appareil photo, Formats, « Le plus compatible ». L’appareil photographie alors en JPEG et le problème disparaît.

Sauf que non. Mes communautés voyaient arriver des centaines de fichiers .heic chaque jour, envoyés par des membres qui ignorent jusqu’à l’existence de ce format. Je me voyais mal publier une annonce épinglée expliquant à chacun comment modifier un réglage enfoui dans son téléphone pour rendre ses photos « davantage compatibles ». Ce n’est pas aux membres de s’adapter aux limites du logiciel. C’est au logiciel de faire son travail.

Aucune application n’existait pour Invision Community 5. Alors je l’ai développée.

HEIC Uploads

HEIC Uploads convertit en arrière-plan les photos HEIC et HEIF des membres vers un format que le forum affiche, sans jamais bloquer la publication. Le membre poste comme d’habitude, une tâche repère les fichiers concernés, les convertit, bascule la pièce jointe en image et, si le message était déjà publié entre-temps, réécrit son HTML pour y insérer la balise d’image. Les pièces jointes antérieures à l’installation ne sont jamais touchées.

Le moteur de conversion, lui, ne se discutait pas vraiment : ImageMagick via l’extension imagick, seul à savoir décoder le HEIC et encoder l’AVIF en PHP. C’est d’ailleurs le genre de décision qu’on prend rarement en conscience, alors qu’elle conditionne tout le reste.

Le format de sortie m’a réservé une surprise. Je pensais partir sur WebP, valeur sûre. Les mesures en ont décidé autrement : sur une photo d’iPhone de 12 mégapixels, l’AVIF produit un fichier d’environ 90 Ko là où le WebP en pèse 500, et l’encode quatre fois plus vite. Un format à la fois plus rapide et cinq fois plus léger, il n’y avait aucun arbitrage à faire. Accessoirement, le forum y gagne : les 2,1 Mo du HEIC d’origine deviennent 90 Ko servis aux visiteurs.

Quelques choix assumés méritent d’être mentionnés :

  • L’original HEIC est supprimé après conversion. C’est délibéré, et documenté en gros caractères : sauvegardez votre répertoire d’uploads avant l’installation.
  • L’application refuse de s’installer si le serveur ne sait pas convertir (PHP 8.1, extension imagick, ImageMagick compilé avec libheif et un délégué AVIF), en indiquant précisément ce qui manque. Pas d’installation silencieusement inopérante.
  • Six outils en ligne de commande accompagnent l’application, dont un selftest.php qui rejoue la conversion d’un fichier problématique sans forum ni base de données, et un diagnose.php qui localise une panne en six étapes.

En production

L’application tourne en production sur un vrai forum depuis le 10 août : 191 conversions, aucun échec, chaîne validée du téléversement à l’affichage, réécriture des messages déjà publiés comprise. La version 1.0.1, publiée aujourd’hui après un audit complet, corrige les limitations connues de la 1.0.0 et referme deux failles de sécurité.

Le tout est publié sous licence MIT, ce qui reste ma manière de rendre au commun ce que le commun m’a donné, traduit en cinq langues, et disponible sur GitHub. Les rapports de bugs sont les bienvenus, idéalement accompagnés de la sortie de diagnose.php.

Vos membres n’ont rien à changer dans leur iPhone. Et c’est très bien comme ça.


Écrivez quelques éclats d'âme...

Dans l'ombre vacillante d'une chandelle, où les murmures du vent se mêlent aux secrets d'un vieux parchemin, je vous invite à tisser une toile de mots. Écrivez quelques éclats d'âme – rêve, étoile, abîme, étreinte, brume – et laissez-les danser sur la page, comme des lucioles dans une nuit d'encre. Que diriez-vous de les entrelacer dans une phrase, un souffle, une histoire ?

S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire