PHP Conference Japan 2024

imagecolorallocatealpha

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

imagecolorallocatealpha为图像分配颜色

描述

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

imagecolorallocatealpha() 的行为与 imagecolorallocate() 完全相同,只是增加了透明度参数 alpha

参数

image

一个 GdImage 对象,由图像创建函数(如 imagecreatetruecolor())返回。

red

红色分量的值。

green

绿色分量的值。

blue

蓝色分量的值。

alpha

一个介于 0127 之间的值。 0 表示完全不透明,而 127 表示完全透明。

redgreenblue 参数是 0 到 255 之间的整数或 0x00 到 0xFF 之间的十六进制数。

返回值

一个颜色标识符,如果分配失败则为 false

警告

此函数可能返回布尔值 false,但也可能返回一个计算结果为 false 的非布尔值。 有关详细信息,请阅读有关 布尔值 的部分。 使用 === 运算符 测试此函数的返回值。

变更日志

版本 描述
8.0.0 image 现在期望一个 GdImage 实例;之前,期望一个有效的 gd 资源

示例

示例 #1 使用 imagecolorallocatealpha() 的示例

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

// 获取白色背景和黑色边框
$back = imagecolorallocate($image, 255, 255, 255);
$border = imagecolorallocate($image, 0, 0, 0);
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;

// 分配具有 alpha 值的颜色
$yellow = imagecolorallocatealpha($image, 255, 255, 0, 75);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);

// 绘制 3 个重叠的圆圈
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);

// 不要忘记输出正确的头部!
header('Content-Type: image/png');

// 最后,输出结果
imagepng($image);
imagedestroy($image);
?>

上面的示例将输出类似于以下内容

Output of example : Example of using imagecolorallocatealpha()

示例 #2 转换典型 alpha 值以供 imagecolorallocatealpha() 使用

通常,0 的 alpha 值表示完全透明的像素,并且 alpha 通道有 8 位。要将此类 alpha 值转换为与 imagecolorallocatealpha() 兼容,一些简单的算术运算就足够了。

<?php
$alpha8
= 0; // 完全透明
var_dump(127 - ($alpha8 >> 1));
$alpha8 = 255; // 完全不透明
var_dump(127 - ($alpha8 >> 1));
?>

以上示例将输出

int(127)
int(0)

参见

添加注释

用户贡献的注释 3 条注释

eric (at) junioronline.us
18 年前
如果您只想提取颜色的 alpha 值,您可以像这样简单地提取它

<?php

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

?>

它实际上移除了前 24 位(其中 8x3 用于每种颜色),并返回剩余的 7 个分配位(通常用于 alpha)
Brett G
9 年前
在处理透明度时,避免使用 imagecreate() 并改用 imagecreatetruecolor()。在基于调色板的图像中,透明度效果可能无法按预期工作。
fjoggen at gmail dot com
17 年前
如果您需要计算具有 alpha 通道的颜色的整数表示形式,而无需初始化图像并使用 imagecolorallocatealpha 函数。那么此函数可能会有所帮助

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

echo
alphaColor("FFFFFF",127);
?>
To Top