是否可以使用以下命令创建具有完整Alpha通道的PNG:imagecolortransparent()

时间:2012-06-06 10:20:00

标签: php png transparency alpha gdlib

我正在寻找一种方法,通过使用aplha通道在图像中创建透明区域。

我刚刚找到了这样的方式:

定义颜色并将其设置为透明。

imagealphablending($img, false);   // has to be false for imagecolortransparent
imagesavealpha($img, false);       // false = single color transparency

$mask_color = imagecolorallocatealpha($img, 0, 255, 0, 127);
imagecolortransparent( $img, $mask_color );

但结果是单色透明。如果我尝试将其与具有Alpha通道的图像合并,则蒙版颜色将再次可见。

这种情况发生在我再次启用imagesavealpha()时,该合并过程需要。

顺便说一句:我通过将源图像与蒙版图像合并来创建 $ img

$new_img = imagecreatetruecolor( 150, 100 );
$new_white = imagecolorallocatealpha( $new_img, 255, 255, 255, 0 );
imagefill( $new_img, 0, 0, $new_white );

imagealphablending($new_img, false);   // has to be false for full alpha
imagesavealpha($new_img, true);       // true = full alpha channel

imagecopyresampled( $new_img, $img       ,0, 0, 0, 0, 150, 100, 150, 100);
imagecopyresampled( $new_img, $alpha_img ,0, 0, 0, 0, 150, 100, 150, 100);

// save preview
imagepng( $new_img, $image_path . $preview_dir_name . $new_file_name );

$ img 的透明区域现在再次可见。

那么,有没有办法通过使用完整的alpha通道使特定的彩色区域透明?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法:

// get source image
$img = imagecreatefromjpeg( $image_path . $image_file );

// save transparency in alpha channel
imagealphablending($img, false);
imagesavealpha($img, true);

// define index for transparent color
$transparent = imagecolorallocatealpha( $preview_temp, 255, 255, 255, 127 );

// replace pixel information
imagesetpixel( $img, $x, $y, $transparent );

使用imagesetpixel()我可以使用其Alpha通道替换像素并在给定图片中获取透明区域。

它对我有用,也许我稍后会发布完整的代码。

但你知道另一个解决方案吗?