ホームページ  >  記事  >  バックエンド開発  >  PHP で PNG のサイズを変更するときに透明度を維持するにはどうすればよいですか?

PHP で PNG のサイズを変更するときに透明度を維持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 22:46:10143ブラウズ

How Can I Preserve Transparency When Resizing PNGs in PHP?

PHP で PNG のサイズを変更するときに透明度を維持する

PHP で背景が透明な PNG 画像のサイズを変更する場合、透明度が維持されていることを確認することが重要です。維持された。ただし、多くのオンライン コード サンプルはこれを適切に実現できず、サイズ変更後に背景が黒くなります。

この問題に対処するには、コードに特定の調整を行う必要があります。 imagecolorallocatealpha() 関数を実行する前に、ブレンディング モードとアルファ チャネル保存フラグの両方をそれぞれ 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。