GDライブラリのアンチエイリアシング機能設計は比較的単純で、オンとオフのみをサポートしています。基礎となる実装は、GDライブラリ自体によって制御されており、露出した細かい調整インターフェイスはありません。したがって、画像療法()を介して抗拡張の程度を直接調整することはできません。
より高い解像度で描画し、ズームアウトします
これは、一般的に使用される「スーパーサンプリング反放射」アイデアです。最初に大きなサイズで画像を描画し、アンチエリアスをオンにしてから、 ImageCopyResampled()を介してターゲットサイズに収縮します。
<?php
$width = 200;
$height = 200;
// ダブルサイズのキャンバスを作成します
$largeWidth = $width * 2;
$largeHeight = $height * 2;
$largeImage = imagecreatetruecolor($largeWidth, $largeHeight);
imageantialias($largeImage, true);
$white = imagecolorallocate($largeImage, 255, 255, 255);
$black = imagecolorallocate($largeImage, 0, 0, 0);
imagefilledrectangle($largeImage, 0, 0, $largeWidth, $largeHeight, $white);
// 線または数字を描きます,座標は2回拡大します
imageline($largeImage, 10 * 2, 10 * 2, 190 * 2, 190 * 2, $black);
// ターゲットキャンバスを作成します
$finalImage = imagecreatetruecolor($width, $height);
imagecopyresampled($finalImage, $largeImage, 0, 0, 0, 0, $width, $height, $largeWidth, $largeHeight);
header('Content-Type: image/png');
imagepng($finalImage);
imagedestroy($largeImage);
imagedestroy($finalImage);
?>
Imagicickを使用してGDを置き換えます
アンチアリアシングに高い要件がある場合は、ImageMagickのPHP拡張Imagicickを使用することをお勧めします。フィルターの設定やサンプリング方法など、より良い結果とより豊富なパラメーターなど、より多くの防止コントロールをサポートします。
例:
<?php
$imagick = new Imagick();
$imagick->newImage(200, 200, new ImagickPixel('white'));
$draw = new ImagickDraw();
$draw->setStrokeColor('black');
$draw->setStrokeWidth(2);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$draw->line(10, 10, 190, 190);
$imagick->drawImage($draw);
header("Content-Type: image/png");
echo $imagick;
?>
アンチエリアシングアルゴリズムを手動で実装します
これには、強力な画像処理の知識が必要であり、拡張効果に特別な要件がない限り、一般的に推奨されません。
$image = imagecreatefrompng('https://m66.net/path/to/image.png');