使用 imagecreatetruecolor() 建立真彩色畫布後,預設背景為黑色。若來源圖片有透明通道,直接 imagecopyresampled() 會導致透明區域變黑。解決方法是建立畫布後先填入白色並設為透明色。
<?php // 建立 200x200 真彩色畫布 $img = imagecreatetruecolor(200, 200); // 分配白色 $color = imagecolorallocate($img, 255, 255, 255); // 設定白色為透明色 imagecolortransparent($img, $color); // 填滿白色(同時成為透明背景) imagefill($img, 0, 0, $color); // 接著進行 imagecopyresampled() 與 Imagecopymerge() 即可保持透明 ?>
imagecreatetruecolor() 建立的畫布無透明資訊,預設黑色。imagecolortransparent() 指定某顏色為透明色。imagefill() 以該顏色填滿畫布,形成透明背景。