2024 年 PHP 大会日本站

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 资源
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@email
13年前
请注意,一些GIF图像可能不包含透明色。 markglibres at 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
10年前
对于 GD 版本 > 2,此函数的行为非常奇怪。如果找不到透明颜色,它返回颜色计数而不是 -1(如注释所示)。小心!
steved at HaHaHa dot com dot au
16年前
如何在 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
17 年前
调整透明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
16年前
我以艰难的方式发现,对于两个具有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都被转换为透明背景——即使它们在原图中并非透明。
但是如何检测原图中的透明度呢?我最终想到可以通过编程的方式测试透明度:将原图像的副本叠加在一张全黑图像上,记录特定像素位置的颜色值,然后重复此过程,将原图像的副本叠加在一张全白图像上,记录相同像素位置的颜色值,并将这些值与第一组值进行比较。
如果两组值完全一致,并且使用了合理的采样点,则可以将图像视为不透明。如果两组值显示出差异,则应将图像视为具有透明背景。
[email protected]
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);
?>
[email protected]
17 年前
一种简单的检查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");
[email protected]
18年前
关于[email protected],他有一个相当复杂的方法来确定GIF是否设置了任何透明度……

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

例如

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

当前PHP版本:4.4.4
[GD版本] => 内置 (兼容2.0.28)
[email protected]
20年前
调整大小或复制图像(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
21年前
你好!
我目前使用的是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
14年前
我想与大家分享如何制作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,这很容易解释为true或false在你的代码的其他地方。

注意: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;
?>

对于具有alpha的PNG返回true,否则返回false。
这无法检测具有透明度的8位PNG,但可以通过搜索文件内容中是否存在“PLTE”*和*“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
20年前
事实上,此函数可用于两种用途

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
21年前
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