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 :

http://devs.maraumax.fr/php-mask/images/masques/masque-1-min.jpghttp://devs.maraumax.fr/php-mask/images/masques/masque-2-min.jpghttp://devs.maraumax.fr/php-mask/images/masques/masque-3-min.jpghttp://devs.maraumax.fr/php-mask/images/masques/masque-4-min.jpghttp://devs.maraumax.fr/php-mask/images/masques/masque-5-min.jpg

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');
 
?>

Billets relatifs

4 Commentaire(s)

  1. Commenté par bizzy le Monday 28 June à 15:47

    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)

  2. Réponse

    Si j'y pense je l'ajoute d'ici quelques jours wink

  3. Commenté par Pompier le Tuesday 24 May à 10:36

    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 hmm

  4. Commenté par Pompier le Tuesday 24 May à 11:23

    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 wink

  5. Réponse

    Merci pour la remarque que je corrige.

  6. Commenté par Caro le Sunday 22 April à 02:18

    Ne fonctionne pas avec un png transparent...  pourquoi?

  7. Réponse

    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.

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.