SunshinePHP Developer Conference 2015

imagecolorallocatealpha

(PHP 4 >= 4.3.2, PHP 5)

imagecolorallocatealphaAlloue une couleur à une image

Description

int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )

imagecolorallocatealpha() se comporte comme imagecolorallocate() avec en plus le paramètre de transparence alpha.

Liste de paramètres

image

Une ressource d'image, retournée par une des fonctions de création d'images, comme imagecreatetruecolor().

red

Valeur du composant rouge.

green

Valeur du composant vert.

blue

Valeur du composant bleu.

alpha

Une valeur entre 0 et 127. 0 indique une opacité complète tandis que 127 indique une transparence complète.

Les paramètres red, green et blue sont des entiers compris entre 0 et 255, ou des hexadécimaux compris entre 0x00 et 0xFF.

Valeurs de retour

Un identifiant de couleur ou FALSE si l'allocation échoue.

Avertissement

Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur équivalent à FALSE. Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur === pour tester la valeur de retour exacte de cette fonction.

Historique

Version Description
5.1.3 Retourne FALSE si l'allocation échoue. Précédemment, -1 était retourné.

Exemples

Exemple #1 Exemple avec imagecolorallocatealpha()

<?php
$size 
300;
$image=imagecreatetruecolor($size$size);

// quelque chose pour obtenir un fond blanc avec une bordure noire
$back imagecolorallocate($image255255255);
$border imagecolorallocate($image000);
imagefilledrectangle($image00$size 1$size 1$back);
imagerectangle($image00$size 1$size 1$border);

$yellow_x 100;
$yellow_y 75;
$red_x    120;
$red_y    165;
$blue_x   187;
$blue_y   125;
$radius   150;

// alloue des couleurs avec des valeurs alpha
$yellow imagecolorallocatealpha($image255255075);
$red    imagecolorallocatealpha($image2550075);
$blue   imagecolorallocatealpha($image0025575);

// Dessine 3 ellipses
imagefilledellipse($image$yellow_x$yellow_y$radius$radius$yellow);
imagefilledellipse($image$red_x$red_y$radius$radius$red);
imagefilledellipse($image$blue_x$blue_y$radius$radius$blue);

// Ne pas oublier d'envoyer un header correct
header('Content-Type: image/png');

// et finallement, afficher le résultat
imagepng($image);
imagedestroy($image);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Affichage de l'exemple : imagecolorallocatealpha()

Notes

Note: Cette fonction requiert la bibliothèque GD 2.0.1 ou supérieure (2.0.28 ou supérieure est recommandée).

Voir aussi

add a note add a note

User Contributed Notes 5 notes

up
2
hosh [underscore] 90 [at] live [dot] com
3 years ago
I have had a case where I got the alpha from a raw RGBA pallete. This was stored as 8bit where 0 is completely transparant, and 255 is complete opaque.
This is impossible to use with imagecolorallocatealpha() as it requires a 7bit int where 0 is completely opaque and 127 is completely transparant (otherway around)
You can solve this by subtracting 255, removing the negative sign (either by converting to string and substr($alpha, 1) or some other way) and then bitshifting the answer to the right by one 1 bit.

Example:
<?php
$alpha
= 0; // equivalent to alpha 127 needed for imagecolorallocatealpha()
$alpha = $alpha - 255; // subtract 255, this will give a negative number
$alpha = substr($alpha, 1); // remove negative/minus sign
$alpha = (int)$alpha; // convert back to integer
$alpha = $alpha >> 1; // bitshift to the right once.
echo $alpha; // output: 127

// This can be done in one line of course:
$alpha = 255; // equivalent to 0 for imagecolorallocatealpha()
$alpha = ((int)(substr($alpha - 255, 1))) >> 1;
echo
$alpha; // outputs 0
?>
up
2
eric (at) junioronline.us
8 years ago
If you only wish to extract the alpha value for a color, you can simply extract it like so:

<?php

    $color
= imagecolorat($im, 50, 50);
   
$alpha = $color >> 24;

?>

It actually shifts off the first 24 bits (where 8x3 are used for each color), and returns the remaining 7 allocated bits (commonly used for alpha)
up
0
Ben Zemm
2 years ago
"This was stored as 8bit where 0 is completely transparant, and 255 is complete opaque."

This would be a lot more efficient:

<?php
$alpha7
= ((~((int)$alpha8)) & 0xff) >> 1;
?>

where alpha8==255, alpha7==0
where alpha8=127, alpha7== 64
where alpha8==0, alpha7==127
up
0
fjoggen at gmail dot com
6 years ago
If you need to calculate the integer representation of a color with an alpha channel, without initialising an image and using the imagecolorallocatealpha function. Then this function might be of some help:

<?php
function alphaColor($hexColor,$alpha)
{
        return
bindec(decbin($alpha).decbin(hexdec($hexColor));
}

echo
alphaColor("FFFFFF",127);
?>
up
-1
fchristl at hotmail dot com
11 years ago
Check out this Source, it's a little funny feature showing you, for what imagecolorallocatealpha() is used:

<?php
$im
=imagecreatetruecolor(300,300);
$white=imagecolorallocate($im,255,255,255);
imagefilledrectangle($im,0,0,imagesx($im),imagesy($im),$white);
for(
$i=0;$i<256;$i=$i+10)
{
$col=imagecolorallocatealpha($im,$i,$i,$i,ceil(rand(0,127)));
imagefilledellipse($im,$i,$i,$i,$i,$col);
}
header("content-type: image/png");
imagepng($im);
?>
To Top