Masque de transparence en PHP
Voici une fonction vous permettant d'appliquer un masque de transparences sur vos images en php.
Cette manipulation peux vous permettre ensuite d'afficher vos images sur votre site.
Notez que le système est lourd car il "scan" tous les pixels du calque et de l'images.
Vous pouvez tester le système avec vos images à cette adresse.
Concernant la création des masques il vous faudra un logiciel capable d'utiliser la transparence. (Dehors paint !)
La fonction conserve les zones transparences et rend transparent les zones opaques blanches.
Voici les masques utilisés sur mon espace de développement :
Et voici la fonction en question :
<?php /* Applique un masque de transparence à une image $image -> image source (Format PNG) $masque -> masque à appliquer (Format PNG) */ function mask_transparency($image, $masque) { // Récupération des dimenssions de l'image list($image_w, $image_h) = getimagesize($image); // Création de image $iimage = imagecreatefrompng($image); // Désactivation mode blending et sauvegarde infos canal alpha imagealphablending($iimage, false); imagesavealpha($iimage, true); // Création du masque $imasque = imagecreatefrompng($masque); for ($x=0; $x<$image_w; ++$x) { for ($y=0; $y<$image_h; ++$y) { // Récupérations infos pixel du masque $pxl_masque = imagecolorsforindex($imasque, imagecolorat($imasque, $x, $y)); // Récupérations infos pixel de l'image $pxl_image = imagecolorsforindex($iimage, imagecolorat($iimage, $x, $y)); // Nouvelles informations $color = imagecolorallocatealpha($iimage, $pxl_image['red'], $pxl_image['green'], $pxl_image['blue'], (127-$pxl_masque['alpha'])); // On applique la modification imagesetpixel($iimage, $x, $y, $color); } } // On sauvegarde l'image imagepng($iimage, $image); }
Exemple d'utilisation :
<?php // Application du masque de "masques/mon_masque.png" sur l'image "images/mon_images.png" mask_transparency('images/mon_image.png', 'masques/mon_masque.png'); ?>
Fonction extrêmement intéressante !!!
Serait i l possible d'avoir à disposition le script de la page d'exemple ?
Impossible pour moi d'adapter mon code pour arriver au même résultat...
Je voudrais appliquer un masque sur un jpg mais rien n'y fait ( erreur sur la fonction imagecolorat)
Si j'y pense je l'ajoute d'ici quelques jours
je n'arrive pas a faire fonctionner le site malgré que je comprenne parfaitement son fonctionnement, j'ai toujours une erreur : imagecolorat() [function.imagecolorat]: 0,496 is out of bounds in C:\Program Files.....
J'ai tester le imagecolorat seul, et j'ai bien l'index correcte ... bizarre
Je confirme mes dires, en effet il ne faut pas dire dans la condition des boucles que x<=image_x mais x<image_x sinon on sort du cadre étant donné que ca incrémente d'un pixel a chaque fois
Merci pour la remarque que je corrige.
Ne fonctionne pas avec un png transparent... pourquoi?
En image source du coup j'imagine ? Pas pas super simple de travailler avec la transparence en PHP, il faut regarder du coté de imagealphablending de mémoire.