ホームページ >バックエンド開発 >PHPチュートリアル >PHP の GDlib を使用して透明度を保ったまま PNG のサイズを変更し、アルファ チャネルを保持するにはどうすればよいですか?

PHP の GDlib を使用して透明度を保ったまま PNG のサイズを変更し、アルファ チャネルを保持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 02:43:09993ブラウズ

How Can I Resize PNGs with Transparency Using PHP's GDlib and Preserve Alpha Channels?

PHP の GDlib を使用して透明度を指定して PNG のサイズを変更する

PNG ファイルを扱う場合、画像の透明度を維持することが不可欠です。 GDlib は画像操作機能を提供しますが、透明度を維持したまま PNG のサイズを変更するのは難しい場合があります。

GD の imagecopyresampled 関数を使用するときに発生する問題の 1 つは、元の PNG の透明な領域が単色に置き換えられることです。これは、imagesavealpha を true に設定しているにもかかわらず発生します。

これを解決するには、アルファ設定を正しく指定することが重要です。 PHP では、アルファ設定はソース イメージではなくターゲット イメージに適用されます。ターゲット画像のアルファプロパティを調整することで、透明度の保持を実現できます。

imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );

imagealphablending(false) は、ブレンドを無効にし、画像のアルファ チャネルを尊重します。 imageavealpha(true) は、PNG のアルファ チャネルが出力に保持されることを保証します。

これらの調整を組み込んだ改訂された PHP コード スニペットは次のとおりです:

$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 );

この変更されたコードにより、PNG のサイズが効果的に変更されます。透明感を保ちながら画像を表示します。すべてのケースに完璧であることが保証されているわけではありませんが、確実な出発点となることに注意してください。

以上がPHP の GDlib を使用して透明度を保ったまま PNG のサイズを変更し、アルファ チャネルを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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