透明な背景は、PNG画像を操作する際の一般的な要件です。ただし、PHPのImageFlip()関数を使用してPNG画像をひっくり返すと、透明な背景が黒で満たされているという問題に遭遇する可能性があります。これは、ImageFlip()関数が画像を反転するときに画像の透明な背景を保持しないためです。
PHPのImageFlip()関数は画像をフリップするために使用でき、その基本的な構文は次のとおりです。
imageflip(resource $image, int $mode): bool
$ image : ImageCreatefrommpng()やImageCreatefromjpeg()などの関数を介して作成できる画像リソースです。
$モード:フリップモード。これは次のことができます。
IMG_FLIP_HORIZONTAL :水平フリップ
img_flip_vertical :垂直フリップ
IMG_FLIP_BOTH :水平および垂直フリップ
簡単な例については、PNG画像があり、水平方向に反転したいとします。
$image = imagecreatefrompng('image.png'); // 負荷 PNG 写真
imageflip($image, IMG_FLIP_HORIZONTAL); // 画像を水平に裏返します
imagepng($image, 'flipped_image.png'); // 反転した画像を保存します
imagedestroy($image); // 無料のメモリ
このPNG画像の背景が透明である場合、フリップ後に透明な部分が黒くなることがわかりますが、これは予想される効果ではありません。
ImageFlip()関数自体は、透明な背景を保持しません。これは、フリップ操作が透明性に関係なく、デフォルトで背景色をデフォルトで埋めるためです。したがって、画像に透明な領域が含まれている場合、これらの領域は黒で満たされ、視覚エラーが発生します。
この問題を解決するために、透明性を手動で処理できます。特定のアプローチは、画像をめくる前に新しい画像を作成し、 ImageCopy()関数を使用して元の画像を新しい画像にコピーし、透明度が保持されるようにすることです。
これが完全なコードの例です。
<?php
// 負荷 PNG 写真
$image = imagecreatefrompng('image.png');
// 画像の幅と高さを取得します
$width = imagesx($image);
$height = imagesy($image);
// 新しい画像リソースを作成します,透明な背景を確保します
$newImage = imagecreatetruecolor($width, $height);
// 透明性を保ちます
imagealphablending($newImage, false);
imagesavealpha($newImage, true);
// 元の画像を新しい画像にコピーします
imagecopy($newImage, $image, 0, 0, 0, 0, $width, $height);
// 画像をひっくり返します
imageflip($newImage, IMG_FLIP_HORIZONTAL);
// 反転した画像を保存します
imagepng($newImage, 'flipped_image.png');
// 無料のメモリ
imagedestroy($image);
imagedestroy($newImage);
?>
このコードでは、 ImageCreateTrueColor()を使用して新しい画像リソースを作成し、 ImageAlphableending()とImageAvealpha()を使用して透明性を保証します。次に、元の画像を新しい画像にコピーしてひっくり返します。
上記の方法により、PHPのImageFlip()関数を使用してPNG画像を反転させるときに透明な背景が失われないようにし、黒い背景の外観を回避できます。この方法は、透明な背景の問題を効果的に解決し、画像の正しい表示を確保することができます。
この記事が問題を解決するのに役立つことを願っています。画像処理に関連する他の問題に遭遇した場合は、公式のPHPドキュメントを参照したり、さらに質問することもできます。