PHP - Notes perso sur Imagick, un résumé de pourquoi je vire GD à coups de pompes dans l'oignon.

Allez, pour une fois, j'ai un peu de temps devant moi, je vais éplucher un peu la lib Image magick dont je parlais il n'y à guère...

La base

charger UNE image

Simple: pas besoin de plusieurs fonctions selon le format, il suffit de $images = new Imagick('image.jpg');

charger DES images (et là c'est fort)

Même pas nécessaire de passer par un foreach, on fournit le tableau des fichiers voire directement un glob: $images = new Imagick(glob('images/*.JPG'));

Sauver une image

$im->writeImage('image.jpg');

Faire une miniature

Si on laisse une dimension à 0, les proportions sont conservées (quand tu vois la merde que c'est avec GD !) $image->thumbnailImage(100, 0);

Output une image

header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
# ici on effectue un traitement puis on sort le résultat
echo $image;

Récupération d'infos sur les images

  • taille $im->getImageWidth() $im->getImageHeight()
  • format $im->getImageFormat()

création d'une nouvelle image

$im->NewImage(largeur,hauteur,couleur de fond);

création d'une couleur

Comme pour GD, il faut créer un objet couleur dans les traitements d'image, mais c'est plus simple qu'avec GD (et plus complet): il suffit de passer une couleur selon les normes CSS. Du coup, la transparence n'est pas gérée par une connerie de paramètre «alpha» mais simplement par ... rgba()... 💖

$couleur=new ImagickPixel("white");
$couleur=new ImagickPixel("#FFF");
$couleur=new ImagickPixel('rgb(255,255,200)');
$couleur=new ImagickPixel('rgba(255,255,200,0.5)');

🆒 ⮕ Ça peut paraître compliqué, mais en fait, dans les fonctions où on est sensé utiliser ImagickPixel, je me suis aperçu qu'on pouvait tout simplement passer une string contenant la couleur css... elles se démerdent seules. 😍

Traitements

Ajouts

  • de bordure ->borderImage(couleur,largeur bords verticaux, largeur bords horizontaux): $im->borderImage(new ImagickPixel("white"), 5, 5);
  • de texte :
  • de stéganographie (cacher un filigrane dans une image) ->steganoImage():

Modification de couleurs

  • sepia ->sepiaToneImage(force) : une valeur raisonnable est 80 (sic)
  • solarisation ->solarizeImage(force)
  • négatif ->negateImage(gris): $im->negateImage(0);
  • niveaux
    • $im->normalizeImage();
    • $im->autoLevelImage();
  • gamma ->gammaImage(niveau) : $im->gammaImage(5);
  • contraste $im->contrastImage(niveau)
  • luminosité et contraste $im->brightnessContrastImage(niveau luminosite, niveau contraste);
  • égalisation $im->equalizeImage()
  • coloriser ->colorizeImage(couleur,opacite) : $im->colorizeImage("red",0.5); 🤬 pas réussi à l'utiliser pour ce test...

Modification de taille et d'orientation

  • redimensionner :
    • ->resizeImage(largeur,hauteur, filtre, flou) : $i->resizeImage(250,0,Imagick::FILTER_POINT,0);
    • ->scaleImage(largeur,hauteur): pas encore compris la différence avec la précédente
    • recadrer ->cropImage(largeur,hauteur,x,y): $im->cropImage(200,200,50,50);
    • 💖 créer une miniature à la taille donnée en recadrant l'image autour du centre ->cropThumbnailImage(largeur,hauteur)
  • retourner :
    • $im->flipImage() pour retourner horizontalement
    • $im->flopImage() pour retourner verticalement
  • pivoter ->rotateimage(color, $angle): $im->rotateImage(new ImagickPixel('#00000000'), 75);

Modifications de qualité

  • modification d'opacité ->setImageOpacity(0-1) : $im->->setImageOpacity(0.3);
  • netteté ->sharpenImage(rayon, deviation,canal):
  • amélioration ->enhanceImage()
  • flou :
    • flou tout court ->blurImage(rayon, décalage): $im->blurImage(5,2);
    • gaussien ->gaussianBlurImage(rayon, deviation) : $im->gaussianBlurImage(5,2);
    • de mouvement ->motionBlurImage(rayon,deviation,angle) : $im->motionBlurImage(5,5,45);
  • réduction du nombre de couleurs ->posterizeImage(nb de couleurs, 0/1) :$im->posterizeImage(5,0);
  • ajout de bruit ->addNoiseImage(type) : `$im->addNoiseImage(imagick::NOISE_GAUSSIAN ); voir les constantes de type de bruit

Modification d'aspect et déformations

  • aspect crayon $im->sketchImage(rayon, deviation, angle);
  • aspect fusain $im ->charcoalImage(rayon, deviation);
  • aspect emboss ->shadeImage(gris, angle, hauteur):
    • $im->->shadeImage(1, 90, 2); # emboss + image grisée
    • $im->shadeImage(0, 90,2) # emboss sur l'image d'origine (couleur)
  • peinture à l'huile ->oilPaintImage(rayon) : $im->oilPaintImage(5);
  • détection de bords ->edgeImage(rayon) : $im->edgeImage(5);
  • vagues ->waves(amplitude,longueur): $im->waveImage( 10, 10);
  • déformation ->distortImage(methode, arguments[],0) : voir les constantes de déformation

interactions d'images

Conclusion

Image Magick me semble particulièrement bien nommée tant les possibilités sont énormes et la simplicité d'utilisation étonnante: on sent une volonté de se simplifier la vie lors de l'utilisation... c'est juste beau.

Je voulais mettre une image de chaque effet dans les descriptions mais:

  1. ça prenait une place de ouf
  2. je préfère reprendre certaines de mes applis/api avec imagick
  3. j'ai plus le temps, les autres arrivent
  4. j'ai la flemme.

[EDIT] En fait, j'ai fait une page de test même si tout n'est pas concluant : http://test.warriordudimanche.net/imagick/

RIDITLETEUR spécial DEV : CSS, HTML, JS, PHP...

A l'occasion d'un ménage dans les brouillons de billets, je compile les trucs DEV qui trainaient par là

Ressources CSS

Ressources JS

Ressources PHP

  • https://github.com/jcampbell1/simple-file-manager : GitHub - jcampbell1/simple-file-manager: A Simple PHP file manager. The code is a single php file.
  • https://grafikart.fr/tutoriels/authentification-2-facteurs-totp-630 : Tutoriel vidéo PHP : Authentification 2 facteurs, TOTP | Grafikart
  • https://phpbestpractices.org/ : A short, practical guide for common and confusing PHP tasks (Storing passwords, PHP and MySQL, PHP tags, Auto-loading classes, Single vs. double quotes, define() vs. const, Caching PHP opcode, PHP and Memcached, PHP and regex, Serving PHP, Sending email, Validating email addresses, Sanitizing HTML, PHP and UTF-8, Working with dates and times, Checking null and false values, Removing accent marks (diacritics) )

Tiny Tims Adventures - YouTube

Pour toute personne ayant envie de sourire - voire de rire - aujourd'hui, je partage la chaîne de Tim, un Anglais qui imite à la perfection un enfant de «trois ans bientôt six» et fait des blagues aux gens...

Fous rires garantis

Everything, Everywhere, All at Once - Chez Sammy

Il était passé complètement à côté, le Bronco...

J'ai trouvé le film long et le côté déjanté, appréciable au début, a fini par me perdre...

Tu m'as donné envie de lui redonner une chance, en particulier pour le personnage de Waymond ... Allez, dès que je suis assez en forme pour pas m'endormir à 21:00 devant l'écran.

Serie: Last of Us, la meilleure serie... tout court ?

Je viens de terminer last of us et je pense qu'il s'agit de la meilleure série que j'ai vue.

L'histoire

Je n'ai jamais joué au jeu ce qui fait que je n'avais aucun à priori, positif ou négatif. Toutefois, le scénario est solide, l'histoire bien racontée, les flashbacks particulièrement bien amenés... l'ensemble est cohérent et remarquablement bien rythmé. On ne s'ennuie pas, toutes les digressions servent la narration.

On retrouve beaucoup de références aux films de zombie mais tout est amené et utilisé de façon si subtile et intelligente que jamais on ne se dit «personne ne fait ça!». Mieux, on retrouve souvent le personnage en train de faire ce à quoi on pensait la minute d'avant... bâtir un scénar solide et une histoire qui tient la route avec des personnages qui font ce que ferait une personne normale à ce moment là: voilà une recette efficace pour maintenir le spectateur dans l'histoire.

Les personnages

Pas de manichéisme ici: difficile de juger et de condamner les personnages tant ils naviguent dans le gris. Ni bons ni méchants, juste des gens qui cherchent à survivre et la morale «habituelle» n'est pas forcément celle qu'on retient. Les personnages sont remarquablement humains, en particulier les personnages principaux, qui évoluent ensemble au fil des neuf épisodes.

Le jeu des acteurs

Il y avait longtemps que je n'avais pas vu d'aussi remarquables acteurs: Bella Ramsey et Pedro Pascal sont tout simplement exceptionnels. Leur jeu évolue tout le long des épisodes de façon très subtile et humaine. Les meilleurs moments se passent même de dialogues et leur jeu comble les non dits: on voit comment l'homme redevient progressivement père et comment la jeune adolescente devient petit à petit la fille du premier. C'est tout simplement magistral.

Ce que j'ai particulièrement apprécié, c'est l'absence de volonté de montrer des gens sublimes: au contraire, on se sent proche de ces personnages imparfaits, non maquillés et loin des gravures aux corps parfaits qu'on nous impose à chaque fois. On se sent proche d'eux et on les aime, plus sincèrement à chaque épisode. Bella Ramsey est parfaite et son jeu est impressionnant de naturel. Elle EST Ellie, dans toutes ses dimensions humaines - faiblesses comme forces. Pedro Pascal n'est pas en reste: on retrouve dans son jeu tous les sentiments d'un père ayant perdu sa fille dans un monde détruit et qui retrouve une raison de vivre avec l'arrivée d'Ellie.

Merci à eux deux pour cette prestation sans faille. J'en ai encore la gorge serrée.

Des histoires plutôt qu'une histoire

Certains épisodes racontent l'histoire parallèle à celle des personnages principaux, mais pas comme une digression... plutôt comme le complément qui montre que l'histoire d'une personne ne saurait être séparée de celle de son entourage.

Je retiens en particulier l'histoire d'amour de l'épisode 3: ce que je reproche souvent aux séries et films mettant en scène l'homosexualité, c'est de le faire de façon parfaitement artificielle, comme un prétexte pour être à la mode, une façon un peu racoleuse de tenter de séduire un public ciblé pour vendre sa came. C'est moche, sans saveur et, surtout, ça n'apporte strictement rien à l'histoire.

Ici, tout est parfait: leur rencontre, la sensibilité, la simplicité et l'humanité avec laquelle leur histoire est racontée, la beauté et le romantisme, le vrai, qui marque leur histoire... Au bout du compte, la série choisit de montrer ce qu'il y a de beau à sauver dans l'humanité en montrant deux hommes qui s'aiment. Jamais de voyeurisme, jamais de grandes phrases. En plus on choisit un survivaliste - parangon de virilisme habituellement - pour cette histoire. Magnifique et habilement mené. J'en ai eu les larmes aux yeux.

On notera également la suggestion des sentiments naissants d'Ellie pour son amie, là aussi si subtils qu'on ressent l'émotion de nos propres premiers émois amoureux. Magistral de simplicité, de naturel et d'humanité.

En fait, tout est là: le regard posé sur les personnages est toujours bienveillant et compréhensif, sans artifice, sans complication, sans clichés et c'est là la remarquable maîtrise qui rend l'ensemble si exceptionnel.

Merci pour ces neuf épisodes, merci pour cette fin, merci pour Ellie, pour Joe, pour Bill et Frank... Merci pour ces moments et pour l'attachement à ces personnages.

Désormais, toutes les séries devront se mesurer à l'aune de Last of Us à mes yeux.

SwebDev - La fonction CSS clamp()

Clamp permet de spécifier trois valeurs pour une propriété : la valeur minimale, la valeur préférée et la valeur maximale.

Glopglop N°1

Ainsi, on pourra donner des tailles fixes comme minimum et maximum et une taille variable (pourcentages ou valeur de viewport) comme valeur préférée: la valeur variable sera utilisée, mais bornée au minimum et au maximum. ex: clamp(20px, 5vw, 54px)

Glopglop N°2

On peut faire des calculs directement dans clamp() : font-size: clamp(20px, 16px + 5vw, 54px);

Glopglop N°3

Clamp peut être utilisé sur les paddings, les margins etc... Tout ce qui a une valeur numérique (length, number, percentage...)

Lectures de vacances : 1 légende, 1 labyrinthe, 2 auteurs découverts - Chez Sammy

Ouelcome back copain !

Je partage ton avis sur Dieu David Gemmell et celui qui est sur les quatrième de couv' de ses romans: «on a envie de croire que tout cela fut vrai tant c'est beau»

Écriture simple et claire mais jamais simpliste, univers cohérent (c'est pas si souvent), personnages forts mais humains... <3

Et Pratchett aussi ! (j'ai - encore - recommencé la lecture des annales du disque monde... )

Film: Les Folies Fermières

Hier-soir, on a regardé un petit feel good movie français: Les folies fermières.

Spoilers inside

affiche

C'est l'histoire d'un jeune fermier dont l'exploitation va être saisie et qui cherche des moyens d'éviter la faillite... pour cela, il décide, contre l'avis de sa famille, de transformer sa ferme en cabaret et de monter un spectacle à partir de rien.

Pourquoi j'ai aimé ?

on ne se moque de personne

c'est un film qui ne cherche pas les effets comiques lourdingues ou absurdes, la caricature voire les clichés pour faire rire aux dépend de qui que ce soit. Les moments drôles le sont à cause de la situation.

c'est un film bien rythmé

Il y a de nombreux moments d'émotion qui alternent avec des instants drôles ou attendrissants. On ne s'ennuie jamais et à aucun moment on ne sent de longueur: c'est suffisamment rare pour le souligner.

c'est un film très authentique

Les acteurs et la réalisation sont extraordinaires de sincérité: au bout de quelques minutes, on oublie qu'il s'agit d'acteurs qui jouent un rôle. On a rapidement l'impression de voir des amis et on se prend d'affection pour eux. Ils sont présentés et abordés avec une grande humanité et entretiennent des relations et des liens pleins de hauts et de bas, de réactions parfois épidermiques mais toujours authentiques et bienveillantes. On se sent proche d'eux dès le début du film et on les connaît en quelques minutes.

Tous sont vraiment très bons mais j'ai une mention spéciale à Alban Ivanov qui prouve qu'il sait jouer juste sans en faire des tonnes et à Sabrina Ouazani, pour sa prestation physique bien entendu, mais surtout pour sa justesse de ton, son naturel, sa présence à l'écran... J'ajouterais également Philippe Benhamou, transformiste imitant Dalida, dont le jeu chaleureux et le visage d'une intense expressivité concourent vraiment à l'ambiance humaine du film.

On est très loin des clichés

Non seulement le film n'utilise pas de clichés éculés pour faire rire, mais il joue avec certains d'entre eux sans jamais sombrer dans la facilité ou le pathos. Pourtant, quand on démarre, on a peur de voir:

  • le cliché de l'homosexuel transformiste super sensible qui va avoir une relation avec un fermier qui se découvre amoureux
  • le cliché du cul terreux brut de décoffrage (le seul étant le vieux papi réac dont on donne une image peu reluisante)
  • le cliché de la danseuse superbe qui va tomber amoureuse du fermier potelé
  • le cliché du magicien et de sa «faire valoir» sculpturale etc.

Et bien non: les clichés sont élégamment évités et discrètement remis en question:

  • L'inévitable romance entre la belle danseuse et le paysan est habilement évitée et brièvement évoquée comme erreur d'interprétation de la part de l'ex copine de David à la faveur d'une situation équivoque.
  • la magicienne aura pour partenaire un garçon venu au départ pour le site internet puis intégré tacitement dans le spectacle comme assistant.
  • L'homosexuel transformiste est plein d'humanité et de tendresse pour ses camarades mais sait faire preuve de caractère et il est capable de revenir sur une opinion.
  • Les paysans son loin d'être des culs-terreux réacs et insensibles, comme le souligne David/Ivanov: ils sont les premiers à adhérer et à défendre l'idée du cabaret, ils montrent leur désespoir et leurs failles...
  • D'ailleurs, pas d'idylle convenue entre Dominique et Fred (joué par Ludovic Bertillot), qui se montre sensible au charme du beau transformiste qu'il prend pour une femme... De la chaleur humaine, de l'affection qui dit «je comprends ta souffrance et je suis là» mais rien d'aussi bancal qu'un revirement «surprise» d'orientation sexuelle.

Tout cela est suggéré à l'attention, comme un clin d'oeil complice mais sans grossir le trait, subtilement.

En conclusion

C'est un film honnête, humain, sensible et juste. On aimerait participer à cette aventure, manger avec eux et faire partie de ce groupe. Un film sans meurtres, sans flics, sans méchants, sans rapports manichéens, sans angoisse... ça fait du bien...

(...)

Feather Wiki

Un wiki en une page html qui contient aussi l'éditeur permettant de le modifier (ajout/edition de pages, markdown etc) pour moins de 60ko.

Bim !

Via https://sebsauvage.net/links/ & http://nicolas-delsaux.hd.free.fr/Shaarli/?PenQ-A
Fil RSS des articles