如何在 PHP 中正確調整具有透明度的 PNG 大小?

Susan Sarandon
發布: 2024-11-25 05:03:15
原創
337 人瀏覽過

How to Properly Resize PNGs with Transparency in PHP?

在 PHP 中調整 PNG 的透明度大小:綜合解決方案

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板