PHPを使用して画像を処理する場合、 ImageCrop()関数は、指定された領域に画像をトリミングできる非常に実用的なツールです。ただし、透明な背景でPNG写真を扱っている場合、誤った処理により、トリミング後に透明な背景が失われ、黒または白の背景になる可能性があります。この記事では、ImageCrop()関数でトリミングするときにPNG画像を透明に保つ方法について詳しく説明します。
ImageCrop()は、PHP 5.5.0によって導入された関数です。その機能は、新しい画像リソースを返すことです。これは、指定されたサイズに応じてトリミングされる元の画像の結果です。基本的な使用法は次のとおりです。
$cropped = imagecrop($image, ['x' => 100, 'y' => 100, 'width' => 200, 'height' => 200]);
$画像がPNG画像であり、トリミング後に元の画像の透明な背景を保持したい場合、注意する必要がある重要な詳細を以下に示します。
PNG画像を処理し、 ImageCrop()を使用してトリミングする場合、通常、透明な部分は追加の処理なしで黒で満たされます。これは、PHPがデフォルトで透明チャネルを自動的に保持しないためです。
この問題を解決するには、画像をトリミングしてから次の手順を実行する必要があります。
新しい透明なキャンバスを作成します。
アルファチャネルの保存を有効にします。
トリミングされた画像をこの透明なキャンバスにコピーします。
最終出力または画像を保存します。
以下は、透明な背景を持つ画像を適切にトリミングし、それらを透明に保つ方法を示す完全なサンプルコードを示します。
<?php
// 元の画像をロードします
$sourcePath = 'https://gitbox.net/images/sample.png';
$src = imagecreatefrompng($sourcePath);
// 作物エリアを設定します
$cropArea = [
'x' => 50,
'y' => 50,
'width' => 200,
'height' => 200
];
// 画像をトリミングします
$cropped = imagecrop($src, $cropArea);
if ($cropped !== false) {
// 新しい透明なキャンバスを作成します
$transparent = imagecreatetruecolor($cropArea['width'], $cropArea['height']);
// 透明性ミックスモードを有効にします
imagealphablending($transparent, false);
// 完全なものを保存しますalphaチャネル情報
imagesavealpha($transparent, true);
// キャンバスに透明な色を入れます
$transparentColor = imagecolorallocatealpha($transparent, 0, 0, 0, 127);
imagefill($transparent, 0, 0, $transparentColor);
// 拷贝画像をトリミングします到透明画布上
imagecopy($transparent, $cropped, 0, 0, 0, 0, $cropArea['width'], $cropArea['height']);
// ブラウザに画像を出力します
header('Content-Type: image/png');
imagepng($transparent);
// リソースを破壊します
imagedestroy($transparent);
imagedestroy($cropped);
imagedestroy($src);
} else {
echo 'トリミングが失敗しました';
}
?>
ImageCrop()によって返された画像リソースには、正しいアルファ情報が含まれていない場合があるため、ImageCreateTrueColor()を使用して新しいキャンバスを作成する必要があります。
Imagealphableending()およびImagesAvealpha()を使用することは、透明な背景を維持するための鍵です。
最終的な画像をファイルとして保存する予定がある場合は、 ImagePng($ Transparent)の代わりにImagePng($透明、 'output.png')を使用できます。
PNG画像のトリミングと透明なバックグラウンド効果を保持することは、PHPで完全に実行可能であり、画像リソースのアルファチャネルを正しく設定するだけです。 ImageCrop()と透明なキャンバスを組み合わせることにより、作物エリアを正確に制御し、アバターの収穫やマップ処理などのシーンに適した画像の元の透明度を維持できます。
この手法を習得すると、PHP画像処理の品質とプロフェッショナリズムが大幅に向上する可能性があります。