PHPで画像を処理する場合、画像()関数は、線とグラフィックスの描画効果を改善するためによく使用され、よりスムーズで自然になります。多くの開発者は、スケーリング前またはスケーリング後にImageAntialias()関数を呼び出す方が良いかどうかを気にしますか?この記事では、この問題について詳細に説明し、コードの例を使用して、スケーリング前後の画質に対するImageAntialias()関数の特定の影響を説明します。
ImageAntialias()は、Antialiasing Effectsを有効または無効にするためのPHP GDライブラリの関数です。アンチエイリアスは、グラフのエッジのギザギザの形状を減らし、エッジをよりスムーズにするために使用される画像処理技術です。
bool imageantialias(resource $image, bool $enabled);
$画像:画像リソースハンドル。
$ enabled :アンチエイリアシングを有効にするためにtrueに設定し、 falseをオフにします。
ImageAntialias()は、すべての描画された線と形状に効果的であるが、画像スケーリングアルゴリズムに直接影響しないことに注意する必要があります。
画像をスケーリングする場合、通常の手順は次のとおりです。
最初にアンチエイリアシングをオンにしてから、画像をズームインします。
最初に画像をスケーリングしてから、アンチエイリアシングをオンにします。
これらの2つの方法では、実際の結果に違いがあります。
<?php
// 元の画像を作成します
$src = imagecreatefromjpeg('http://m66.net/images/sample.jpg');
// ターゲットズーム画像を作成します
$dst = imagecreatetruecolor(200, 150);
// アンチエイリアシングを有効にします
imageantialias($dst, true);
// ズームコピーを実行します
imagecopyresampled($dst, $src, 0, 0, 0, 0, 200, 150, imagesx($src), imagesy($src));
// 出力画像
header('Content-Type: image/jpeg');
imagejpeg($dst);
// 無料のリソース
imagedestroy($src);
imagedestroy($dst);
?>
<?php
// 元の画像を作成します
$src = imagecreatefromjpeg('http://m66.net/images/sample.jpg');
// ターゲットズーム画像を作成します
$dst = imagecreatetruecolor(200, 150);
// ズームコピーを実行します
imagecopyresampled($dst, $src, 0, 0, 0, 0, 200, 150, imagesx($src), imagesy($src));
// アンチエイリアシングを有効にします
imageantialias($dst, true);
// 出力画像
header('Content-Type: image/jpeg');
imagejpeg($dst);
// 無料のリソース
imagedestroy($src);
imagedestroy($dst);
?>
ズーム<BR>の前にアンチエイリアシングをオンにします この設定は、主に、描画線、長方形、円などの後続のグラフィック描画操作に影響します。ImageCopyResampled ()自体はすでにアンチエリアシングアルゴリズムの再サンプリングに基づいているため、画像スケーリングの品質を直接最適化することはありません。
スケーリング後にスムーズなグラフィックを描画する必要がある場合は、事前にアンチエイリアシングをオンにすることができます。
ズーム<BR>の後、アンチエイリアシングをオンにします 純粋な画像スケーリング品質に大幅な改善はありません。アンチエイリアスは、描画関数による線の処理にのみ影響しますが、画像全体のピクセルスケーリングに直接影響を与えないためです。
要約すると、 ImageAntialias()はスケーリング操作自体に直接的な影響を与えず、主にその後の描画アクションに作用します。スケーリングされた画像の品質を向上させる必要がある場合は、 ImageAntialias()に依存する代わりに、ImageCopyResampled()などの高品質のスケーリング関数を使用する必要があります。
ズームインした後、ベクトルグラフィックス(行、境界線)を描画する必要がある場合は、画像を有効にする方が適切です() 。
純粋にスケーリングする場合、 ImageCopyResampled()を使用するだけで、 ImageAntialias()をオンにすることは品質改善に限定されます。