PHPで画像スケーリングを処理する場合、出力イメージの品質を確実に保証する方法は、常に開発者の焦点でした。 ImageCopyResampled()関数は、高品質のスケーリング効果に広く使用されていますが、 ImageAntialias()関数は画像のエッジでのジャギング現象を効果的に減らすことができます。この記事では、これら2つの機能を組み合わせて画像スケーリングの全体的な品質を向上させる方法について説明します。
ImageCopyResampled()
これは、ソース画像をスケーリングしてターゲット画像にコピーするために使用される双線形補間に基づく画像コピー関数です。ズームするときにピクセルを滑らかにし、画質を大幅に改善し、ピクセルブロックを回避します。
ImageAntialias()
この関数は、画像リソースの防止効果を有効または無効にするために使用され、主に描画ラインに作用してエッジを柔らかくし、ジャグを避けます。ズームした画像のエッジ処理に非常に役立ちます。
通常、最初にImageCopyResampled()を使用してスケーリングを実現し、次にemageAntialias()を使用してターゲット画像をアンチアリアして、より滑らかな画像エッジを取得します。プロセスは次のとおりです。
ターゲット画像リソースを作成します。
Anti-ALIASを有効にするには、ImageAntialias()を呼び出します。
高品質のスケーリングには、 ImageCopyResampled()を使用します。
画像を出力または保存します。
<?php
// 元の画像パス
$srcPath = 'https://m66.net/images/sample.jpg';
// ソースイメージリソースを作成します
$srcImage = imagecreatefromjpeg($srcPath);
if (!$srcImage) {
die('ソース画像をロードできません');
}
// ソースの画像サイズを取得します
$srcWidth = imagesx($srcImage);
$srcHeight = imagesy($srcImage);
// ターゲット画像サイズを設定します(ここで半分にスケーリングします)
$dstWidth = $srcWidth / 2;
$dstHeight = $srcHeight / 2;
// ターゲット画像リソースを作成します
$dstImage = imagecreatetruecolor($dstWidth, $dstHeight);
// アンチエイリアシングを有効にします
imageantialias($dstImage, true);
// 高品質のズームで画像をコピーします
imagecopyresampled(
$dstImage, // ターゲット画像リソース
$srcImage, // ソース画像リソース
0, 0, // ターゲット画像開始座標
0, 0, // ソース画像開始座標
$dstWidth, // ターゲット画像幅
$dstHeight, // ターゲット画像の高さ
$srcWidth, // ソース画像幅
$srcHeight // ソース画像の高さ
);
// ブラウザに画像を出力します
header('Content-Type: image/jpeg');
imagejpeg($dstImage);
// 無料のリソース
imagedestroy($srcImage);
imagedestroy($dstImage);
?>
ImageAntialias()の画像リソースのアンチエイリアシングプロセスは、線を描くときにのみ有効になり、 ImageCopyResampled()のスケーリング後にピクセル品質を直接改善することはできません。ただし、特定の特定のシナリオでアンチアライアをオンにすると、画像のエッジが遅くなる可能性があります。
複雑なスケーリングのニーズのために、 ImageCopyResampled()はすでに最良の選択であり、 ImageAntialias()と組み合わされているため、ライン、テキストなどの詳細をさらに最適化できます。
GDライブラリがサポートされていること、および互換性の問題を回避するためにPHPバージョンが新しいことを確認してください。