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 サイトの他の関連記事を参照してください。