ARNO*

Geek dilettante habitant une belle et grande propriété sur la Côte d’améthyste

  • Journée de code sur Flip-Zone. J’ai passé les plus gros scripts de traitement d’image, qui tournaient avec les fonctions intégrées à #SPIP, en ligne de commande dans #ImageMagick.

    Sur ce site, j’ai depuis belle lurette des scripts qui fabriquent automatiquement des « couvertures » façon magazine, avec le logo du site qui passe derrière la tête du mannequin. Et j’en fait une série de variantes. Par exemple sur cette page :
    http://www.flip-zone.net/fashion/ready-to-wear/fashion-houses-42/maison-martin-margiela-5210
    j’ai la première page du portfolio, avec une grande image (944x600) et le logo « Flip-Zone », couleur violet-éteint, et en dessous des vignettes verticales (pour les autres collections de la même maison), et en fin de page, des vignettes horizontales pour les collections de la même saison.

    L’automatisme de la Une, c’est :
    – prendre l’image de fond,
    – lui appliquer des dégradés à gauche et à droite vers la couleur de fond, ce qui donne l’impression d’un grand bandeau horizontal, avec la pub à droite,
    – coloriser le logo dans la couleur qui va bien, le mettre à la bonne taille, et l’appliquer centré en haut d’image,
    – coller par dessus l’image du mannequin détouré, qui est un fichier PNG (donc avec couche alpha).

    Jusque là, tout était réalisé en fonctions de traitement d’image de SPIP, c’est souple et très lisible à maintenir. Sauf que j’arrive un peu aux limites :
    – ça fabrique tout de même pas mal de fichiers intermédiaires,
    – je commence à saturer le disque dur du serveur (600 Go),
    – au premier calcul, ça bouffe des ressources folles – quand j’efface local/cache-gd, le site met au moins 24 heures avant de commencer à re-fonctionner à peu près et à servir des pages, tellement il est pris par les calculs,
    – et comme je veux que ces images puissent maintenant être aussi en haute définition, j’allais accentuer ces problèmes.

    Bref, j’ai décidé aujourd’hui de court-circuiter GD et de directement tenter de coder ça en ligne de commande d’ImageMagick. La commande elle-même se construit en PHP dans SPIP, ce qui me permet d’avoir des variables tirées de SPIP (telles que les couleurs, converties en RGBA avec |couleur_rgba, les dimensions de l’image…

    Et au final, toute la procédure se fait en une unique ligne de convert, plus aucune image intermédiaire fabriquée (ni stockée), et c’est invraisemblablement rapide.

    Bon, ça pique un peu les yeux, mais voici ce que ça donne :

    convert IMG/arton4091.jpg \( -size 1047x824 gradient:'rgba(171,218,226,1)'-'rgba(171,218,226,0)' -rotate 90 \) \
        -gravity East -composite \
        \( -size 1047x330 gradient:'rgba(171,218,226,1)'-'rgba(171,218,226,0)' -rotate -90 \) \
        -gravity West -composite \
        \( squelettes/imgs/flip-zone-big.png +level-colors 'rgba(54,168,200,1)' -resize 1483 \) \
        -gravity North -geometry +0+70 -composite \ IMG/artoff4091.png -composite local/cache-sommaire/b/b0f831ae954ee943f5eac89fab0d9bfc.jpg
    • Pour info : j’ai finalement totalement effacé le cache d’images (effacé /local) pour voir ce que ça donne, et le site est redevenu totalement fonctionnel en moins d’une heure. (Auparavant, ça prenait au moins 24 heures avant de pouvoir réafficher la moindre page, et 48 heures pour cesser d’avoir des ralentissements.)