ホームページ > バックエンド開発 > PHPチュートリアル > PHP の GDlib で PNG 画像のサイズを変更するときに透明度を維持するにはどうすればよいですか?

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

Mary-Kate Olsen
リリース: 2024-11-29 13:39:26
オリジナル
1001 人が閲覧しました

How Can I Preserve Transparency When Resizing PNG Images with PHP's GDlib?

GDlib の imagecopyresampled を使用した PNG 画像の透明度の維持

PHP の GDlib imagecopyresampled 関数を使用して PNG 画像のサイズを変更する場合、透明度を維持することが重要です。よくある問題の 1 つは、透明な領域が単色 (通常は黒または別の望ましくない色) になることです。

問題ステートメント

次の PHP コード スニペットを考えてみましょう:

$uploadTempFile = $myField[ 'tmp_name' ]
list( $uploadWidth, $uploadHeight, $uploadType ) 
  = getimagesize( $uploadTempFile );

$srcImage = imagecreatefrompng( $uploadTempFile );    
imagesavealpha( $targetImage, true );

$targetImage = imagecreatetruecolor( 128, 128 );
imagecopyresampled( $targetImage, $srcImage, 
                    0, 0, 
                    0, 0, 
                    128, 128, 
                    $uploadWidth, $uploadHeight );

imagepng(  $targetImage, 'out.png', 9 );
ログイン後にコピー

このコードは、ブラウザーにアップロードされた PNG 画像のサイズを 128x128 に正常に変更します。ただし、元の画像の透明な部分は黒に置き換えられます。 imageavealpha を true に設定しているにもかかわらず、透明度は保持されません。

解決策

透明度を保持する解決策は次のとおりです。

imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );
ログイン後にコピー

imagealphablending を設定することによりfalse に設定し、imagesavealpha を true に設定すると、ターゲット画像の透明度はサイズ変更後も維持されます。

完全な置換コード

透明度設定を含む、完全な置換コードは次のとおりです:

$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 );
ログイン後にコピー

以上がPHP の GDlib で PNG 画像のサイズを変更するときに透明度を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート