구현 방법을 도입하기 전에 먼저 두 가지 주요 기능을 이해합니다.
ImageEllipse (resource $ image, int $ cx, int $ cy, int $ width, int $ height, int $ color) : 이미지에 타원을 그립니다.
imageAntialias (Resource $ image, bool $ enabled) : 켜기 또는 끄기 꺼짐.
그러나 imageAntialias ()는 imageLine () , imageRectangle () 등과 같은 함수를 사용하여 그려진 그래픽에 대해서만 작동하며 imageEllipse () 에는 적용되지 않습니다. 이것은 많은 개발자들이 간과하기 쉬운 구덩이입니다.
전략을 변경하거나 고해상도를 사용하여 그래픽을 그리거나 이미지를 축소하거나 알리어스 방지 효과를 수동으로 시뮬레이션해야합니다. 다음은 일반적인 접근법입니다. 고해상도 드로잉 + 스케일링 은 추가 그래픽 라이브러리의 도움없이 반 알리 아스를 달성하기 쉬운 방법입니다.
<?php
// 스케일링 배수를 설정하십시오,예를 들어3시간을 드러내십시오
$scale = 3;
$width = 200;
$height = 200;
$scaledWidth = $width * $scale;
$scaledHeight = $height * $scale;
// 큰 이미지 리소스를 만듭니다
$largeImage = imagecreatetruecolor($scaledWidth, $scaledHeight);
imageantialias($largeImage, true);
// 배경색을 흰색으로 설정하고 채우십시오
$white = imagecolorallocate($largeImage, 255, 255, 255);
imagefill($largeImage, 0, 0, $white);
// 원 색상을 설정하십시오
$circleColor = imagecolorallocate($largeImage, 0, 0, 255);
// 타원을 그립니다(사실 그것은 원입니다)
$cx = $scaledWidth / 2;
$cy = $scaledHeight / 2;
$radius = min($scaledWidth, $scaledHeight) * 0.4;
imageellipse($largeImage, $cx, $cy, $radius * 2, $radius * 2, $circleColor);
// 대상 작은 이미지 자원을 만듭니다
$finalImage = imagecreatetruecolor($width, $height);
// 반 알리 아스의 이미지를 수축시킵니다
imagecopyresampled($finalImage, $largeImage, 0, 0, 0, 0, $width, $height, $scaledWidth, $scaledHeight);
// 출력 이미지
header('Content-Type: image/png');
imagepng($finalImage);
// 기억을 청소하십시오
imagedestroy($largeImage);
imagedestroy($finalImage);
?>
이 예에서는 먼저 원래 크기의 3 배를 사용하여 더 큰 원을 그린 다음 이미지를 대상 크기로 줄이기 위해 imageCopyResAmpled () 함수를 사용합니다. 이 프로세스는 안티 앨리어싱을 시뮬레이션하는 것과 같습니다. 출력 이미지의 가장자리는 더 부드럽습니다.
ImageAntialias ()는 ImageEllipse () 에 유효하지 않지만 스케일링 전략을 통해이 한계를 우회하고 고품질 이미지를 생성 할 수 있습니다. 이미지 처리에 대한 요구 사항이 높은 경우 Imagemagick과 같은 전문 이미지 처리 라이브러리를 사용하는 것이 더 적절합니다.
이미지를 출력 브라우저 대신 서버에 저장하려면 다음 방법을 사용할 수 있습니다.
imagepng($finalImage, '/path/to/save/image.png');
또는 액세스 링크 생성 :
$filename = 'https://m66.net/images/circle.png';
imagepng($finalImage, '/var/www/m66.net/images/circle.png');
M66.net 에 해당하는 경로에 쓰기 권한이 있는지 확인하십시오.
이 스케일링 방법은 다각형, 프리 곡선 등과 같은 다른 그림을 그리는데도 적합합니다. GD 라이브러리에서 일반적으로 사용되는 안티 앨리어싱 기술입니다.