以下是允许您调整透明PNG大小并将其合成到另一个图像中的代码片段。该代码经过测试,可在PHP5.1.2、GD2下运行,但我认为它也可以与其他版本的PHP和GD一起使用。
代码已添加注释以帮助您阅读。调整透明PNG图像大小的思路是创建一个完全透明的新目标图像,然后关闭此新图像的imageAlphaBlending,以便复制PNG源文件时,其alpha通道仍然保留。
<?php
function imageComposeAlpha( &$src, &$ovr, $ovr_x, $ovr_y, $ovr_w = false, $ovr_h = false)
{
if( $ovr_w && $ovr_h )
$ovr = imageResizeAlpha( $ovr, $ovr_w, $ovr_h );
imagecopy($src, $ovr, $ovr_x, $ovr_y, 0, 0, imagesx($ovr), imagesy($ovr) );
}
function imageResizeAlpha(&$src, $w, $h)
{
$temp = imagecreatetruecolor($w, $h);
$background = imagecolorallocate($temp, 0, 0, 0);
ImageColorTransparent($temp, $background); imagealphablending($temp, false); imagecopyresized($temp, $src, 0, 0, 0, 0, $w, $h, imagesx($src), imagesy($src));
return $temp;
}
?>
示例用法
<?php
header('Content-type: image/png');
$photoImage = ImageCreateFromJPEG('images/MiuMiu.jpg');
$overlay = ImageCreateFromPNG('images/hair-trans.png');
$percent = 0.8;
$newW = ceil(imagesx($overlay) * $percent);
$newH = ceil(imagesy($overlay) * $percent);
imageComposeAlpha( $photoImage, $overlay, 86, 15, $newW, $newH );
$watermark = imagecreatefrompng('images/watermark.png');
imageComposeAlpha( $photoImage, $watermark, 10, 20, imagesx($watermark)/2, imagesy($watermark)/2 );
$watermark = imagecreatefrompng('images/watermark.png');
imageComposeAlpha( $photoImage, $watermark, 80, 350);
Imagepng($photoImage); ImageDestroy($photoImage);
ImageDestroy($overlay);
ImageDestroy($watermark);
?>