在 PHP 中,調整具有透明背景的 PNG 圖像的大小可能是一個挑戰。為了解決這個問題,一個已被證明無效的程式碼範例需要進行一些關鍵的修改才能實現所需的結果。以下是需要調整的詳細說明:
提供的程式碼:
$this->image = imagecreatefrompng($filename); imagesavealpha($this->image, true); $newImage = imagecreatetruecolor($width, $height); // Make a new transparent image and turn off alpha blending to keep the alpha channel $background = imagecolorallocatealpha($newImage, 255, 255, 255, 127); imagecolortransparent($newImage, $background); imagealphablending($newImage, false); imagesavealpha($newImage, true); imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $newImage; imagepng($this->image,$filename);
仔細查看這段程式碼後,很明顯問題出在 imagecolorallocatealpha() 的語句上被稱為。正確的操作順序在這裡至關重要:您必須先將混合模式設為 false,並將儲存 alpha 通道標誌設為 true 在執行 imagecolorallocatealpha() 之前。
imagesavealpha($newImg, true); imagealphablending($newImg, false);
執行此操作後修改後,您的程式碼應該能夠成功調整具有透明背景的 PNG 圖像的大小,防止背景變黑。
更新對於不透明度在 0 到 100 之間的圖像:
提供的程式碼僅適用於不透明度設定為 0 的圖像。如果影像的不透明度在 0 到 100 之間,背景將顯示為黑色。要解決此問題,您需要調整 imagecopyresampled() 函數以使用 imagecopyresampled(),因為它可以更好地處理具有不同不透明度等級的透明 PNG 映像。
$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent); imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
以上是如何在 PHP 中正確調整具有透明度的 PNG 大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!