首頁 >後端開發 >php教程 >在 PHP 中調整 PNG 大小時如何保持透明度?

在 PHP 中調整 PNG 大小時如何保持透明度?

Susan Sarandon
Susan Sarandon原創
2024-11-23 22:46:10192瀏覽

How Can I Preserve Transparency When Resizing PNGs in PHP?

在PHP 中調整PNG 大小時保持透明度

在PHP 中調整具有透明背景的PNG 影像大小時,確保透明度為至透明度關重要的維持。但網路上很多程式碼範例未能正確實現這一點,導致調整大小後背景變黑。

要解決這個問題,需要對程式碼進行具體調整。在執行 imagecolorallocatealpha() 函數之前,必須將混合模式和儲存 Alpha 通道標誌分別配置為 false 和 true。

以下是包含這些調整的更新程式碼片段:

<?php
/**
 * https://stackoverflow.com/a/279310/470749
 * 
 * @param resource $image
 * @param int $newWidth
 * @param int $newHeight
 * @return resource
 */
public function getImageResized($image, int $newWidth, int $newHeight) {
    $newImg = imagecreatetruecolor($newWidth, $newHeight);
    imagealphablending($newImg, false); // Turn off blending
    imagesavealpha($newImg, true); // Turn on save alpha channel
    $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
    imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent);
    $src_w = imagesx($image);
    $src_h = imagesy($image);
    imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
    return $newImg;
}
?>

透過這些修改,程式碼應該可以有效地保持 PNG 影像的透明度調整大小。

注意:此更新的程式碼僅適用於背景不透明度為 0 的影像。如果影像的不透明度介於 0 到 100 之間,則調整大小後背景將顯示為黑色。

以上是在 PHP 中調整 PNG 大小時如何保持透明度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn