PHP 8.4.2 Released!

imagecolorallocatealpha

(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)

imagecolorallocatealphaAloca uma cor para uma imagem

Descrição

imagecolorallocatealpha(
    GdImage $image,
    int $red,
    int $green,
    int $blue,
    int $alpha
): int|false

imagecolorallocatealpha() se comporta de forma idêntica a imagecolorallocate() com a adição do parâmetro de transparência alpha.

Parâmetros

image

Um objeto GdImage, retornado por uma das funções de criação de imagem, como imagecreatetruecolor().

red

Valor do componente vermelho.

green

Valor do componente verde.

blue

Valor do componente azul.

alpha

Um valor entre 0 e 127. 0 indica completamente opaco enquanto que 127 indica completamente transparente.

Os parâmetros red, green e blue são inteiros entre 0 e 255 ou haxadecimais entre 0x00 e 0xFF.

Valor Retornado

Um identificador de cor ou false se a alocação falhar.

Aviso

Esta função pode retornar o valor booleano false, mas também pode retornar um valor não booleano que pode ser avaliado como false. Leia a seção sobre Booleanos para mais informações. Use o operador === para testar o valor retornado por esta função.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro image agora espera uma instância de GdImage; anteriormente, um resource gd válido era esperado.

Exemplos

Exemplo #1 Exemplo de uso de imagecolorallocatealpha()

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

// algo para obter fundo branco com borda preta
$back = imagecolorallocate($image, 255, 255, 255); //fundo
$border = imagecolorallocate($image, 0, 0, 0); //borda
imagefilledrectangle($image, 0, 0, $size - 1, $size - 1, $back);
imagerectangle($image, 0, 0, $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;

// aloca cores com valores de alfa
$yellow = imagecolorallocatealpha($image, 255, 255, 0, 75);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);

// desenhando 3 círculos sobrepostos
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);

// não esquecer de emitir um cabeçalho corretamente!
header('Content-Type: image/png');

// e finalmente, mostra o resultado
imagepng($image);
imagedestroy($image);
?>

O exemplo acima produzirá algo semelhante a:

Saída do exemplo: Exemplo de uso de imagecolorallocatealpha()

Exemplo #2 Converte valores típicos de alfa para uso com imagecolorallocatealpha()

Normalmente, valores de alfa 0 designam pixels totalmente transparentes, e o canal alfa tem 8 bits. Para converter taia valores de alfa para que sejam compatíveis com imagecolorallocatealpha(), uma aritmética simples é suficiente:

<?php
$alpha8
= 0; // totalmente transparente
var_dump(127 - ($alpha8 >> 1));
$alpha8 = 255; // totalmente opaco
var_dump(127 - ($alpha8 >> 1));
?>

O exemplo acima produzirá:

int(127)
int(0)

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
6
eric (at) junioronline.us
18 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
3
Brett G
9 years ago
When working with transparency, avoid imagecreate() and use imagecreatetruecolor() instead. Transparency effects may not work as expected within a palette-based image.
up
2
fjoggen at gmail dot com
17 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);
?>
To Top