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

PHP で透明性のある PNG のサイズを適切に変更するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-25 05:03:15338ブラウズ

How to Properly Resize PNGs with Transparency in PHP?

PHP で透明を使用した PNG のサイズ変更: 包括的なソリューション

PHP では、背景が透明な PNG 画像のサイズを変更するのが難しい場合があります。これに対処するには、効果がないと判明した 1 つのコード サンプルに、望ましい結果を達成するためにいくつかの重要な変更を加える必要があります。調整が必要な内容の詳細な説明は次のとおりです:

提供されたコード:

$this->image = imagecreatefrompng($filename);

imagesavealpha($this->image, true);
$newImage = imagecreatetruecolor($width, $height);

// Make a new transparent image and turn off alpha blending to keep the alpha channel
$background = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
imagecolortransparent($newImage, $background);
imagealphablending($newImage, false);
imagesavealpha($newImage, true);

imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height,  $this->getWidth(), $this->getHeight());
$this->image = $newImage;  
imagepng($this->image,$filename);

このコードを注意深く検討した結果、問題は imagecolorallocatealpha() のステートメントにあることが明らかになりました。と呼ばれます。ここでは操作の正しい順序が重要です。imagecolorallocatealpha() を実行するに、まずブレンド モードを false に設定し、アルファ チャネル保存フラグを true に設定する必要があります。

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

これを作成した後修正すると、コードは背景が透明な PNG 画像のサイズを正常に変更できるようになり、背景が回転するのを防ぐことができるはずです。 black.

不透明度が 0 ~ 100 の画像の更新:

提供されたコードは、不透明度が 0 に設定されている画像に対してのみ機能します。 0 と 100 では、背景が黒く表示されます。この問題を解決するには、さまざまな不透明度レベルを持つ透明な PNG 画像をより適切に処理できるよう、代わりに imagecopyresampled() を使用するように imagecopyresampled() 関数を調整する必要があります。

$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent);
imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);

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

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