以下程式碼片段可讓您調整透明 PNG 的大小,並將其合成到另一個圖片中。該程式碼經過測試,可在 PHP5.1.2、GD2 上運作,但我認為它也可以與其他版本的 PHP 和 GD 搭配使用。
這段程式碼已加上註解,方便您閱讀。調整透明 PNG 圖片大小的概念是建立一個完全透明的新目標圖片,然後關閉此新圖片的影像 Alpha 混合,以便在複製 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);
?>