PHPでは、 ImageFlip関数を使用して画像をフリップします。これは、画像を処理するときに非常に一般的です。ただし、透明な背景(PNG形式など)の画像を使用すると、 ImageFlipを使用するだけで透明な背景が部分的に喪失したり、不透明になる可能性があります。この記事では、 ImageFlip関数を使用するときに透明な背景を持つ画像を正しく処理する方法について説明します。
PHPのImageFlip関数は、画像を水平または垂直に裏返すために使用されます。この関数の基本的な使用法は次のとおりです。
bool imageflip(resource $image, int $mode)
$ image :画像リソース、通常、 imagecreatefrommpng() 、 imagecreatefromjpeg()などの関数を介して作成された画像。
$モード:フリップモード、以下はいくつかの一般的なモードです。
IMG_FLIP_HORIZONTAL :水平フリップ
img_flip_vertical :垂直フリップ
IMG_FLIP_BOTH :水平および垂直に同時にフリップします
透明な背景を持つPNG画像を使用すると、 ImageFlip関数を直接使用すると、透明な領域が白または他の不透明な色に変わることがあります。これは、画像の透明性情報が適切に保持されていないためです。この問題を解決するには、画像をひっくり返すときに透明な背景部分が透明なままであることを確認する必要があります。
透明な背景を適切に処理するには、次の手順を実行する必要があります。
画像リソースを作成する際には、透明性サポートを有効にする必要があります。 ImageAlphableending()をFalseに設定し、 ImagesAvealpha()を使用することにより、画像の透明性情報が保存されるようにします。
これがサンプルコードです:
<?php
// 画像のロード
$image = imagecreatefrompng('image.png');
// ハイブリッドモードを無効にします,透明性が残っていることを確認してください
imagealphablending($image, false);
// 保存を有効にします alpha 通路
imagesavealpha($image, true);
// 使用imageflip関数は画像をフリップします
imageflip($image, IMG_FLIP_HORIZONTAL);
// ブラウザに画像を出力します
header('Content-Type: image/png');
imagepng($image);
// 無料のリソース
imagedestroy($image);
?>
ImageCreateFrommpng( 'image.png') :ファイルからPNG画像をロードします。
Imagealphableending($ image、false) :ブレンドモードを無効にします。これにより、透明性が上書きされないようにします。
ImagesAvealpha($ Image、True) :PHPに、画像の透明性チャネルを保存するように指示します。
ImageFlip($ image、IMG_FLIP_HORIZONTAL) :画像を水平方向にフリップします。
ImagePng($ image) :Flipped PNG画像を出力します。
これらの設定を使用すると、透明セクションはそのまま残り、不透明な背景色に置き換えることを避けます。
他の画像形式(JPEGなど)の場合、透明性をサポートしていないため、透明性を考慮する必要はありません。そのような画像を処理している場合、 ImageFlip関数は期待どおりに機能し、透明性の問題は含まれません。
これは通常、画像をロードするときに透明性処理オプションが正しく設定されず、透明な背景がデフォルトの白で満たされるためです。この問題は、Imagealphableending($ image、false)およびImagesAvealpha($ image、true)を使用して解決できます。
画質が劣化している場合、出力時の不適切なエンコード方法による可能性があります。 ImagePng()を使用してPNG形式の画像を保存してください。高品質の透明度を自動的に維持します。 JPEG画像の場合は、圧縮品質の設定を検討できます。