使用GDlib 的imagecopyresampled 保持PNG 影像的透明度
使用透明度 P 的GDlib imagecopyresampled 函數調整透明度。一個常見問題是透明區域變成實心,通常是黑色或其他不受歡迎的顏色。
問題陳述
考慮以下 PHP 程式碼片段:
$uploadTempFile = $myField[ 'tmp_name' ] list( $uploadWidth, $uploadHeight, $uploadType ) = getimagesize( $uploadTempFile ); $srcImage = imagecreatefrompng( $uploadTempFile ); imagesavealpha( $targetImage, true ); $targetImage = imagecreatetruecolor( 128, 128 ); imagecopyresampled( $targetImage, $srcImage, 0, 0, 0, 0, 128, 128, $uploadWidth, $uploadHeight ); imagepng( $targetImage, 'out.png', 9 );
此程式碼成功將瀏覽器上傳的 PNG 圖像大小調整為 128x128。然而,原始影像中的透明區域被黑色替換。儘管將 imagesavealpha 設為 true,但並未保留透明度。
解決方案
保留透明度的解決方案是:
imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true );
透過設定 imagealphablending設定為 false 並將 imaimagesalpha 設為true,調整大小後目標影像的透明度保持不變
完整替換代碼
包含透明度設置,完整替換代碼為:
$uploadTempFile = $myField[ 'tmp_name' ] list( $uploadWidth, $uploadHeight, $uploadType ) = getimagesize( $uploadTempFile ); $srcImage = imagecreatefrompng( $uploadTempFile ); $targetImage = imagecreatetruecolor( 128, 128 ); imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true ); imagecopyresampled( $targetImage, $srcImage, 0, 0, 0, 0, 128, 128, $uploadWidth, $uploadHeight ); imagepng( $targetImage, 'out.png', 9 );
以上是使用 PHP 的 GDlib 調整 PNG 圖片大小時如何保持透明度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!