imagecolortransparent

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecolortransparent将颜色定义为透明

描述

imagecolortransparent(GdImage $image, ?int $color = null): int

获取或设置给定 image 中的透明颜色。

参数

image

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

color

使用 imagecolorallocate() 创建的颜色标识符。

返回值

返回新的(或如果未指定则为当前的)透明颜色的标识符。如果 colornull,并且图像没有透明颜色,则返回的标识符将为 -1

变更日志

版本 描述
8.0.0 image 现在需要一个 GdImage 实例;以前,需要有效的 gd resource
8.0.0 color 现在可以为空。

示例

示例 #1 imagecolortransparent() 示例

<?php
// 创建一个 55x30 的图像
$im = imagecreatetruecolor(55, 30);
$red = imagecolorallocate($im, 255, 0, 0);
$black = imagecolorallocate($im, 0, 0, 0);

// 使背景透明
imagecolortransparent($im, $black);

// 绘制一个红色矩形
imagefilledrectangle($im, 4, 4, 50, 25, $red);

// 保存图像
imagepng($im, './imagecolortransparent.png');
imagedestroy($im);
?>

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

Output of example : imagecolortransparent()

注意

注意:

透明度仅在使用 imagecopymerge() 和真彩色图像时复制,在使用 imagecopy() 或调色板图像时不会复制。

注意:

透明颜色是图像的属性,透明度不是颜色的属性。一旦将一种颜色设置为透明颜色,图像中之前绘制的该颜色区域将变为透明。

添加注释

用户贡献的注释 28 个注释

erik at vectorsector dot net
17 年前
此脚本为已创建的 PNG 图像创建了非特定 RGB 颜色的透明度。它还包括不会在此过程中被破坏的覆盖文本脚本。

<?php

header
("Content-type: image/png");
$image = imagecreatetruecolor(250, 250);
$string = $_GET['text'];
$im = imagecreatefrompng("dynIcon.png");
$img = imagecreatetruecolor(16,16);
$orange = imagecolorallocate($im, 220, 210, 60);
$bg_color = imagecolorat($im,1,1);
$px = (imagesx($im) - 3 * strlen($string)) / 2;
imagecolortransparent($im, $bg_color);
imagestring($im, 3, $px, 5, $string, $orange);
imagepng($im);
imagedestroy($im);

?>

例如,如果您通过清除所有颜色并在 Photoshop 中制作透明颜色,使您看到棋盘格背景,表明它是空的,请使用 $bg_color = imagecolorat($im,1,1);。
markglibres at yahoo dot com
15 年前
我编写了一个非常简单的脚本,它可以保留图像的透明度,尤其是在调整大小的时候。

注意:透明度仅在 GIF 和 PNG 文件中受支持。

参数

$new_image 是图像资源标识符,例如由 imagecreatetruecolor() 返回。必须通过引用传递
$image_source 是由 imagecreatefromjpeg、imagecreatefromgif 和 imagecreatefrompng 返回的图像资源标识符。必须通过引用传递

<?php
function setTransparency($new_image,$image_source)
{

$transparencyIndex = imagecolortransparent($image_source);
$transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);

if (
$transparencyIndex >= 0) {
$transparencyColor = imagecolorsforindex($image_source, $transparencyIndex);
}

$transparencyIndex = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
imagefill($new_image, 0, 0, $transparencyIndex);
imagecolortransparent($new_image, $transparencyIndex);

}
?>


示例用法:(调整大小)

<?php
$image_source
= imagecreatefrompng('test.png');
$new_image = imagecreatetruecolor($width, $height);
setTransparency($new_image,$image_source);
imagecopyresampled($new_image, $image_source, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
?>
vladislav dot net 邮箱
13 年前
请注意,某些 GIF 图像可能不包含透明色。markglibres 在 yahoo dot com 于 2009 年 3 月 29 日 02:48 给出的调整大小后的 GIF 图像中强制透明度的良好示例。但有时 GIF 图像中的透明色可能未设置。问题是,您强制透明的颜色可能在原始 GIF 中用作不透明色,并且您将在调整大小后的图像中丢失该颜色。解决方法是不使用某些默认透明色,而是让调整大小后的图像不透明(与原始 GIF 相同)。我使用(几乎)以下代码仅在需要透明度时使调整大小的 GIF 图像透明

<?php
/* ... */

$img = ImageCreateFromGIF($f); /* 从现有 GIF 创建图像:原始图像文件名 $f,您可以从需要的地方获取 */
$transparent_index = ImageColorTransparent($img); /* 返回当前透明色的索引,或 -1 */
if($transparent_index!=(-1)) $transparent_color = ImageColorsForIndex($img,$transparent_index);

/* ... */

$img_resized = ImageCreateTrueColor( $nw, $nh ); /* (新宽度 $nw 和高度 $nh 必须在之前定义) */
if(!empty($transparent_color)) /* 简单检查以确定是否设置了透明色 */
{
$transparent_new = ImageColorAllocate( $img_resized, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue'] );
$transparent_new_index = ImageColorTransparent( $img_resized, $transparent_new );
ImageFill( $img_resized, 0,0, $transparent_new_index ); /* 不要忘记用透明色填充新图像 */
}
list(
$w,$h) = GetImageSize($f); /* 定义原始宽度 $w 和高度 $h */
if( ImageCopyResized( $img_resized, $img, 0,0, 0,0, $nw,$nh, $w,$h ) ) /* 调整大小复制并替换原始图像 */
{
ImageDestroy($img);
$img = $img_resized;
}

/* ... */

header('Content-Type: image/gif');
ImageGIF($img);
ImageDestroy($img);
?>

附言:
如果有错误,我希望您能理解这个想法。
romanenko.alex.v at gmail.com
9 年前
此函数在 GD 版本 > 2 中表现非常奇怪。如果找不到透明色,它会返回颜色数量而不是 -1(如注释中所述)。小心!
steved at HaHaHa dot com dot au
15 年前
如何在 GD 图像中垂直和水平居中您的文本

<?php
// 获取框大小
$box = imagettfbbox($titlesize, 0, $titlefont, $title);

// 找出文本框的宽度和高度
$textW = $box[2] - $box[0];
$textH = $box[5] - $box[3];

// 计算位置
$positionLeft = ($width - $textW)/2;
$positionTop = (($height - $textH)/2);

// 添加一些文本
if($align=="center"){
imagettftext($pic, size, angle, $positionLeft, $positionTop, colour, font, message);
?>
Mikasto
16 年前
要调整透明 PNG 的大小(如果图像透明且 ImageColorTransparent() 返回 -1)
1) 使用新大小创建新图像
2) 使新图像完全透明
3) 为新图像关闭 alpha 混合(以便在复制数据时保留 alpha 通道)
4) 将 copyresampled 或 copyresized 复制到新图像中

PHP 代码
// 1
$im2 = ImageCreateTrueColor($w, $h);
// 2
ImageColorTransparent($im2, ImageColorAllocate($im2, 0, 0, 0));
// 3
ImageAlphaBlending($im2, false);
// 4
ImageCopyResampled($im2, $im, 0, 0, 0, 0, $w, $h, ImageSX($im), ImageSY($im));
talkback at codesponge dot com
19 年前
在一张图像中,只允许一种颜色透明。对 imagecolortransparent 的最后一次调用将是设置为透明的颜色。

我正在处理按钮图像,这些按钮图像的填充颜色略微不同于按钮边框外部的背景颜色。我希望我可以简单地将这两种颜色都设置为透明,从而解决问题。

希望这条信息能为您节省一些时间。
cca220v
15 年前
我通过实践发现,要正确堆叠两个具有 alpha 透明度的 png,您需要显式地重新启用 alpha 混合。

$img=imagecreatetruecolor($dx,$dy);
$img1=imagecreatefrompng($png1); // 第一层
$img2=imagecreatefrompng($png2); // 第二层(较小的图像)

imagealphablending($img, false);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $transparent);
imagesavealpha($img,true);
imagealphablending($img, true); // 删除此行会导致第二层的透明度穿过第一层并将其擦除(图像 >是< 透明的... 就像第二层一样... 但不是第一层,所以它不应该透明)

imagecopyresampled($img,$img1,
imagecopyresampled($img,$img2,
webmaster at webnetwizard dotco dotuk
19 年前
经过一番苦思冥想,我终于找到了一种测试 GIF 图像是否包含背景透明度的方法。这项功能对于我的应用程序至关重要,因为我的应用程序会上传 GIF、JPEG 或 PNG 图像,并同时创建相同图像类型和相同文件名(全尺寸和缩略图版本存储在不同的文件夹中)的缩略图。
在以常规方式上传和移动图像后,一个 switch($image_type) 语句会确保使用最佳代码来生成缩略图;无论图像类型如何。
GIF 类型的问题在于,具有透明背景的 GIF 需要与不具有透明背景的 GIF 进行不同的处理。当我检测不到 GIF 透明度时,要么所有透明的 GIF 都会变成黑色背景,要么所有 GIF 都会被转换为透明背景——即使它们在原始图像中不是透明的。
但如何检测原始图像中的透明度呢?我最终想到,可以通过编程方式将原始图像的副本叠加在全黑图像上,记录特定像素位置的颜色值,然后重复该过程,将原始图像的副本叠加在全白图像上,记录相同像素位置的颜色值,并将这些值与第一组值进行比较。
如果两组值完全一致,并且使用了合理的采样点,则可以将图像视为不透明。如果两组值显示差异,则应将图像视为具有透明背景。
fmkaiba at optonline dot net
16 年前
这是我的“完美”(我用这个词很轻描淡写)缩略图生成脚本,将 '$transparency' 切换为 true 以使其尽力处理 gif 和 png 中的透明度。此代码是基于这里其他所有人的评论和建议构建的,我不应获得全部功劳。到目前为止,它处理了我能抛出的所有错误。
<?php
function createthumb($name, $newname, $new_w, $new_h, $border=false, $transparency=true, $base64=false) {
if(
file_exists($newname))
@
unlink($newname);
if(!
file_exists($name))
return
false;
$arr = split("\.",$name);
$ext = $arr[count($arr)-1];

if(
$ext=="jpeg" || $ext=="jpg"){
$img = @imagecreatefromjpeg($name);
} elseif(
$ext=="png"){
$img = @imagecreatefrompng($name);
} elseif(
$ext=="gif") {
$img = @imagecreatefromgif($name);
}
if(!
$img)
return
false;
$old_x = imageSX($img);
$old_y = imageSY($img);
if(
$old_x < $new_w && $old_y < $new_h) {
$thumb_w = $old_x;
$thumb_h = $old_y;
} elseif (
$old_x > $old_y) {
$thumb_w = $new_w;
$thumb_h = floor(($old_y*($new_h/$old_x)));
} elseif (
$old_x < $old_y) {
$thumb_w = floor($old_x*($new_w/$old_y));
$thumb_h = $new_h;
} elseif (
$old_x == $old_y) {
$thumb_w = $new_w;
$thumb_h = $new_h;
}
$thumb_w = ($thumb_w<1) ? 1 : $thumb_w;
$thumb_h = ($thumb_h<1) ? 1 : $thumb_h;
$new_img = ImageCreateTrueColor($thumb_w, $thumb_h);

if(
$transparency) {
if(
$ext=="png") {
imagealphablending($new_img, false);
$colorTransparent = imagecolorallocatealpha($new_img, 0, 0, 0, 127);
imagefill($new_img, 0, 0, $colorTransparent);
imagesavealpha($new_img, true);
} elseif(
$ext=="gif") {
$trnprt_indx = imagecolortransparent($img);
if (
$trnprt_indx >= 0) {
//its transparent
$trnprt_color = imagecolorsforindex($img, $trnprt_indx);
$trnprt_indx = imagecolorallocate($new_img, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($new_img, 0, 0, $trnprt_indx);
imagecolortransparent($new_img, $trnprt_indx);
}
}
} else {
Imagefill($new_img, 0, 0, imagecolorallocate($new_img, 255, 255, 255));
}

imagecopyresampled($new_img, $img, 0,0,0,0, $thumb_w, $thumb_h, $old_x, $old_y);
if(
$border) {
$black = imagecolorallocate($new_img, 0, 0, 0);
imagerectangle($new_img,0,0, $thumb_w, $thumb_h, $black);
}
if(
$base64) {
ob_start();
imagepng($new_img);
$img = ob_get_contents();
ob_end_clean();
$return = base64_encode($img);
} else {
if(
$ext=="jpeg" || $ext=="jpg"){
imagejpeg($new_img, $newname);
$return = true;
} elseif(
$ext=="png"){
imagepng($new_img, $newname);
$return = true;
} elseif(
$ext=="gif") {
imagegif($new_img, $newname);
$return = true;
}
}
imagedestroy($new_img);
imagedestroy($img);
return
$return;
}
//example useage
createthumb("img.gif", "tn_img.gif", 64,64,true, true, false);
?>
wesley dot gunn at email dot it
16 年前
一个简单的检查 PNG 是否具有 alpha 通道的办法,通过读取 IHDR PNG 头。

$readPng = fopen ($argSourceImagePath, "rb");
$readAlp = fread ($readPng, 52);
fclose ($readPng);

if(substr(bin2hex($readAlp),50,2) == "04" || substr(bin2hex($readAlp),50,2) == "06")
echo("Png has alpha");
glenn at bengeweb dot co dot nz
17 年前
参考 webmaster at webnetwizard dotco dotuk 提供的一种相当复杂的方法,该方法用于确定 GIF 是否设置了任何透明度...

imagecolortransparent 如果没有找到透明度,将返回 -1。

例如

$transColorIndexMain = imageColorTransparent($mainImgObj);
if ($transColorIndexMain >= 0 ) {
# GIF 有透明度 ... ;
}

当前 PHP 版本: 4.4.4
[GD 版本] => 内置 (2.0.28 兼容)
emilus at galeria-m dot art dot pl
19 年前
调整大小或复制图像(gif [gd>=2.0.28] 或 png)并保留透明度。
- 获取当前透明度颜色
- 创建一个新的图像,使用与旧图像相同的调色板,并用透明颜色填充新图像
- 设置透明颜色
- 复制调整大小后的图像

$colorTransparent = imagecolortransparent($im);
$im2 = imagecreate($new_w,$new_h);
imagepalettecopy($im2,$im);
imagefill($im2,0,0,$colorTransparent);
imagecolortransparent($im2, $colorTransparent);
imagecopyresized($im2,$im,0,0,0,0,$new_w,$new_h,$imsx,$imsy);
creator79>>web>>de
20 年前
嗨!
到目前为止,我知道我使用的是 GDLib 1.6.3。
使用 imagecolorclosest($im, $R, $G, $B) 函数而不是 imagecolorallocate() 或 imagecolorexact() 时,可以在任何类型的图像上对任何定义的颜色设置透明度。
Sebastian Sejzer
8 年前
如果您要找的是空白 PNG,则无需每次都生成它。只需定义此常量即可

define("BLANK_PNG", "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m".
"dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg".
"dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN".
"egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ".
"oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA".
"DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII=");
john at jbwalker dot com
12 年前
带有文本的透明背景效果并不理想,因为存在抗锯齿。但我尝试了以下方法,效果很好

<?php
$im
= imagecreatetruecolor(100,20);
$almostblack = imagecolorallocate($im,254,254,254);
imagefill($im,0,0,$almostblack);
$black = imagecolorallocate($im,0,0,0);
imagecolortransparent($im,$almostblack);
//... 设置 x 和 y..
imagettftext($im,8,0,$x,$y,$black,"calibri.ttf",$txt);
?>
admin at fastproxyservers dot org
13 年前
我想与大家分享如何使 PNG 图像透明。我已经尝试了该页面上描述的几乎所有示例,但没有一个对我有用。最后我找到了解决方案,但其中有一些取巧的地方:) 但如果它能用,谁在乎呢?

所以,当我尝试将白色(作为示例)分配为透明色时,它会随机生效(假设 10 个示例中会有 1 个生效)。这反过来让我想到问题可能是白色已经存在于调色板中。因此,如果我尝试添加具有不同索引的另一种白色作为透明色,则会导致错误。

所以,我找到了解决方案,我没有添加新的索引,而是在调色板中搜索了白色索引,并将其定义为透明色:) 最好的方法是使用左下角而不是白色作为透明颜色(我认为这是某些其他软件语言的标准)。

<?php
$index
= imagecolorexact($this->image, 255, 255, 255);
imagecolortransparent($this->image, $index);
?>

您只需要在输出结果之前添加这两行代码即可。
ajamal
15 年前
这对于新手来说可能很重要...如果您试图创建带有透明度的 GIF,请将图像上所有颜色的调色板限制在 216 色... 否则透明度将不起作用... 至少您会得到抖动...
yousuf at philipz dot com
16 年前
嗯,8 位 GIF 和 PNG 文件可以具有多种透明颜色,因此通过手动查看文件或使用 imagecolortransparent 并使用检测到的 RGB 颜色作为 imagecopy(或其他图像复制函数)在真彩色图像上的背景颜色来检测透明颜色将不起作用。获得透明像素显示的唯一方法是逐个将像素颜色复制到新的真彩色图像中。以下是我编写的一些代码来完成此操作。

$original_image = @imagecreatefromgif( $original_image_file );

$original_image_width = imagesx( $original_image );
$original_image_height = imagesy( $original_image );

if ( !imageistruecolor($original_image) ) {
# 检测它是否是非真彩色图像
if ( imagecolortransparent($original_image) >= 0 ) {
# 检测调色板中是否已将任何颜色设置为透明
$truecolor = imagecreatetruecolor( $original_image_width, $original_image_height );
for ($x = 0; $x < $original_image_width; $x++) {
for ($y = 0; $y < $original_image_height; $y++) {
$color_index = ImageColorAt($original_image, $x, $y);
if ( !$color_palette[$color_index] ) {
$rgb = imagecolorsforindex($original_image, $color_index);
$color_to_set = imagecolorallocate($truecolor, $rgb['red'], $rgb['green'], $rgb['blue']);
$color_palette[$color_index] = $color_to_set;
} else {
$color_to_set = $color_palette[$color_index];
}
imagesetpixel($truecolor, $x, $y, $color_to_set);
}
}
imagedestroy($original_image);
$original_image = $truecolor;
}
}
kroccamen, gmail
16 年前
抱歉,下面应该是

<?php
$is_alpha
= ord (file_get_contents ($file_path, false, null, 25, 1)) & 4;
?>

好多了:)
类型 4(灰度透明 PNG)和 6(彩色透明 PNG)都设置了位 4,因此无需两次按位运算,也不需要 ==,因为返回值将是 4 或 0,这很容易在代码的其他地方解释为真或假。

注意:file_get_contents 在这里不会读取整个文件,只会读取一个字节,因此您可以放心,它速度快且安全。
kroccamen, gmail
16 年前
@wesley gunn
非常感谢您提供用于确定 PNG 是 24 位还是 32 位的代码:)
以下是一行改进后的版本,无需使用文件句柄

<?php
$is_alpha
= ((ord (
file_get_contents ($filename, false, null, 25, 1)
) &
6) & 4) == 4;
?>

如果 PNG 有 alpha,则返回 true,否则返回 false。
这无法检测具有透明度的 8 位 PNG,但您可以通过搜索文件内容中是否存在 "PLTE" *AND* "tRNS" 来实现这一点。
tomas at cimax dot com
16 年前
在某些版本中,您必须设置调色板中该颜色的索引号,而不是颜色本身!因此,如果您使用 imagecolorallocate 分配颜色,则此颜色在调色板中将获得 0 索引,因此您必须调用:imagecolortransparent ( resource $image , 0 ) 以使图像透明!
cinymini
17 年前
当您使用调色板图像(使用 imagecreate() 创建)时,分配的第一个颜色是背景色。此颜色不能用于透明度。因此,如果您想使背景透明,请先分配一个虚拟背景色,然后分配真正的背景色并将其声明为透明色。
ingrid
19 年前
此脚本应采用具有白色背景透明度的动画 GIF,并在其上放置一些白色=透明文本,并且可以使用文件名和普通图像标签在任何页面中使用。

一切正常,除了动画。GIF 动画静止不动。不知道如何保持动画的动画效果。这在 PHP 中可能吗?

<?php

$TextFile
= "teller.txt";
$Count = trim(file_get_contents($TextFile));
$FP = fopen($TextFile, "r");
$Count=fgets($FP, 4096);
fclose ($FP);
settype($Count, "integer");
$Count++;
if (
$FP = fopen ($TextFile, "w")){
fwrite ($FP, $Count);
fclose ($FP);
}

$image = "blad.gif";
$im = imagecreatefromgif($image);
$white = imageColorAllocate ($im, 255, 255, 255);
$trans = imagecolortransparent($im,$white);
$hit = "$Count";
$ip = $_SERVER["REMOTE_ADDR"];

ImageString($im, 2, 30, 60, " je bent bezoeker ", $white);
ImageString($im, 3, 20, 80, " $ip.$hit", $trans);

header("Content-Type: image/gif");
Imagegif($im,'',100);
ImageDestroy ($im);

?>
php_comment et 5mm de
19 年前
事实上,此函数可用于两种目的

A.) 在处理 PHP 中的图像时使用透明度(参见水印示例)

B.) 创建部分透明的图片

对于 A.),可以使用真彩色图像,但有一些规定,而 B.) 只能用于基于调色板的图像(= 索引 = 使用 imagecreate 创建,而不是 imagecreatetruecolor)以及支持透明度的格式(png、gif)。

例如,如果您想从给定的真彩色图片中剪切一种颜色,请使用以下方法先将其转换为基于调色板的图像,分配透明度并将其作为 png 提交给浏览器

<?
$img = imagecreatefromjpeg('test.jpg');
imagetruecolortopalette($img, false, 256); // 转换

$white = imagecolorresolve($img, 255, 255, 255); // 解析给定的调色板条目
imagecolortransparent($img, $white);

header("Content-type: image/png");
imagepng($img);
?>
php at kybert dot com
20 年前
我在使用 sandhawk at spies dot com 的示例时遇到了问题,因为我的 png 叠加层和 jpeg 画布使用了不同的颜色深度,因此,此函数对此进行了修正

[代码]
function WatermarkImage($CanvasImage, $WatermarkImage /* 必须为 PHG */, $Opacity=10, $Quality=75)
{
// 创建真彩色画布图像
$canvas_src = imagecreatefromjpeg($CanvasImage);
$canvas_w = ImageSX($canvas_src);
$canvas_h = ImageSY($canvas_src);
$canvas_img = imagecreatetruecolor($canvas_w, $canvas_h);
imagecopy($canvas_img, $canvas_src, 0,0,0,0, $canvas_w, $canvas_h);
imagedestroy($canvas_src); // 不再需要

// 创建真彩色叠加层图像
$overlay_src = imagecreatefrompng($WatermarkImage);
$overlay_w = ImageSX($overlay_src);
$overlay_h = ImageSY($overlay_src);
$overlay_img = imagecreatetruecolor($overlay_w, $overlay_h);
imagecopy($overlay_img, $overlay_src, 0,0,0,0, $overlay_w, $overlay_h);
imagedestroy($overlay_src); // 不再需要

// 设置透明色(选择一个)
$black = imagecolorallocate($overlay_img, 0x00, 0x00, 0x00);
$white = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
$magenta = imagecolorallocate($overlay_img, 0xFF, 0x00, 0xFF);
// 并在此处使用它
imagecolortransparent($overlay_img, $white);

// 复制并合并叠加层图像和画布图像
imagecopymerge($canvas_img, $overlay_img, 0,0,0,0, $overlay_w, $overlay_h, $Opacity);

// 输出
header("Content-type: image/jpeg");
imagejpeg($canvas_img, '', $Quality);

imagedestroy($overlay_img);
imagedestroy($canvas_img);
}

// 使用不透明度设置为 50% 和质量为 95% 的函数
WatermarkImage("canvas.jpg", "overlay.png", 50, 95);

[/代码]
calar at gamigo dot de
21 年前
好的,有些作品...

我有一个使用 GDLib 的测试系统,phpinfo 显示我的版本
"GD 版本 2.0 或更高" 迄今为止,使用 imageColorTransparent 没有问题

然后,我们必须将代码复制到另一台服务器上,在这台服务器上,phpinfo 拍摄了我的版本
"捆绑的 GD 版本(与 2.0.12 兼容)"

jpg 是错误的,什么都没有透明。
关键是,您必须使用:imagecopymerge

我不知道它是否在所有系统上都适用,它只适用于
SUSE 8.2
PHP 4.3.2
Jonatan
21 年前
我发现 ImageColorTransparent() 在真彩色图像上有效,当且仅当透明色为黑色时。
(PHP 4.2.3/GD 2.0)
To Top