如何创建透明背景的图像

问题描述 投票:0回答:7

如何用GDlib创建透明背景的图像?

header('content-type: image/png');

$image = imagecreatetruecolor(900, 350);

imagealphablending($image, true);
imagesavealpha($image, true);

$text_color = imagecolorallocate($image, 0, 51, 102);
imagestring($image,2,4,4,'Test',$text_color);

imagepng($image);
imagedestroy($image);

这里背景是黑色

php gdlib
7个回答
33
投票

添加一行

imagefill($image,0,0,0x7fff0000);

imagestring
之前的某处,它将是透明的。

0x7fff0000
分解为:

alpha = 0x7f
red = 0xff
green = 0x00
blue = 0x00

完全透明。


14
投票

类似这样的事情...

$im = @imagecreatetruecolor(100, 25);
# important part one
imagesavealpha($im, true);
imagealphablending($im, false);
# important part two
$white = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefill($im, 0, 0, $white);
# do whatever you want with transparent image
$lime = imagecolorallocate($im, 204, 255, 51);
imagettftext($im, $font, 0, 0, $font - 3, $lime, "captcha.ttf", $string);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);

10
投票

您必须使用

imagefill()
并用分配的颜色 (
imagecolorallocatealpha()
) 填充 alpha 设置为 0 的颜色。

正如@mvds所说,“分配是不必要的”,如果它是真彩色图像(24或32位),它只是一个整数,所以你可以将该整数直接传递给

imagefill()

当您调用

imagecolorallocate()
时,PHP 在后台对真彩色图像执行的操作是相同的 - 它只是返回计算出的整数。


8
投票

这应该有效:

$img = imagecreatetruecolor(900, 350);

$color = imagecolorallocatealpha($img, 0, 0, 0, 127); //fill transparent back
imagefill($img, 0, 0, $color);
imagesavealpha($img, true);

7
投票

这应该有效。它对我有用。

$thumb = imagecreatetruecolor($newwidth,$newheight);
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127);
imagefill($thumb, 0, 0, $transparent);
imagesavealpha($thumb, true);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagepng($thumb, $output_dir);

1
投票

有时由于 PNG 图像的问题,您将无法获得透明图像。图像应采用以下推荐格式之一:

PNG-8 (recommended)
Colors: 256 or less
Transparency: On/Off
GIF
Colors: 256 or less
Transparency: On/Off
JPEG
Colors: True color
Transparency: n/a

imagecopymerge 函数无法正确处理 PNG-24 图像;因此不推荐。

如果您使用 Adobe Photoshop 创建水印图像,建议您使用“另存为 Web”命令并进行以下设置:

File Format: PNG-8, non-interlaced
Color Reduction: Selective, 256 colors
Dithering: Diffusion, 88%
Transparency: On, Matte: None
Transparency Dither: Diffusion Transparency Dither, 100%

0
投票

imagefill($image,0,0,0x00ffffff);

作为 mvd,但带有 0x00ffffff

© www.soinside.com 2019 - 2024. All rights reserved.