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