이미지 처리에 PHP를 사용할 때 많은 개발자가 ImageAntialias () 기능을 사용하여 이미지 가장자리를 부드럽게하고 드로잉 품질을 향상시킵니다. 그러나 때로는이 기능이 호출 되더라도 이미지 출력이 여전히 들쭉날쭉 한 것처럼 보이며, 이는 반 알리 아스 효과가없는 것 같습니다. 그렇다면 이것은 GD 라이브러리의 버전과 관련이 있습니까? 이 기사는이 문제를 자세히 분석합니다.
ImageAntialias () 는 PHP가 제공하는 GD 라이브러리 기능 중 하나입니다. 구문은 다음과 같습니다.
bool imageantialias(GdImage $image, bool $enabled)
$ enabled가 true 인 경우, anti-aliasing 기능이 활성화됩니다.
이 기능은 일반적으로 선과 그림의 부드러운 도면에 사용됩니다. 특히 슬래시 나 원을 그리는 경우 그림의 품질을 크게 향상시킬 수 있습니다. 예를 들어:
$img = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imageantialias($img, true);
imageline($img, 0, 0, 199, 199, $black);
imagepng($img, 'output.png');
imagedestroy($img);
가장 일반적인 이유는 GD 라이브러리 버전이 기능을 지원하지 않거나 완전히 지원하지 않기 때문입니다. 구체적으로:
일부 이전 버전의 PHP (예 : PHP 5.3 이하)에서 GD 라이브러리의 imageAntialias () 지원은 안정적이지 않습니다.
일부 시스템에서는 PHP를 컴파일 할 때 전체 GD 지원을 활성화하지 못하거나 GD 라이브러리가 단순화 된 버전을 사용합니다 (예 : LIBGD가 사용되지 않음).
PHP 8.0 이후에서 imageAntialias () 함수는 일부 시스템에서 더 이상 사용되지 않고 완전히 무효화되었으며, 반 알리 아스 전략 대신 이미지 스케일링을 사용하는 것이 좋습니다.
따라서 GD 버전을 확인하는 것은 매우 중요합니다. 현재 PHP에서 GD의 특정 정보를 다음과 같이 볼 수 있습니다.
<?php
phpinfo();
페이지에서 "GD 지원"섹션을 찾으려면 프리 타입, libpng, libjpeg 및 기타 확장이 활성화되어 있는지 확인하십시오.
모든 이미지 유형이 반 알리 아스 효과를 볼 수있는 것은 아닙니다. 예를 들어:
imageCreate () 로 만든 이미지는 8 비트 팔레트 이미지이며 anti-aliasing을 지원하지 않습니다.
imageAntialias ()는 imageCreatetRueColor ()가 작성한 실제 색상 이미지가 지원되는 경우에만 지원됩니다 .
imageCreatetRueColor ()를 사용해야합니다. 그렇지 않으면 함수 호출이 오류를보고하지 않지만 적용되지 않습니다.
ImageAntialias ()는 모든 드로잉 기능에 대해 작동하지 않으며 주로 다음 기능에 유효합니다.
imageCopyResAmpled () 와 같은 함수의 경우, antialiasing은 imageAntialias () 가 아닌 스케일링 알고리즘에 따라 다릅니다. 따라서 이미지를 스케일링 할 때 항아리아가 유효하지 않다는 것을 알게되면 다음과 같은 대안을 고려해야합니다.
imagecopyresampled($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
확대 할 때 이미지 품질을 유지하는 것이 권장되는 방법입니다.
GD 라이브러리가 다음 코드를 실행하여 imageAntialias ()를 지원하는지 확인하십시오.
<?php
if (function_exists('imageantialias')) {
echo 'imageantialias() 사용 가능';
} else {
echo 'imageantialias() 不사용 가능';
}
imageAntialias () 가 유효하지 않은 경우 유사한 aliasing 효과를 달성하기 위해 다음 방법을 고려할 수 있습니다.
더 큰 이미지를 만듭니다.
그래픽을 그리십시오.
이미지를 대상 크기로 줄입니다.
예:
$large = imagecreatetruecolor(400, 400);
$white = imagecolorallocate($large, 255, 255, 255);
$black = imagecolorallocate($large, 0, 0, 0);
imagefill($large, 0, 0, $white);
imageellipse($large, 200, 200, 300, 300, $black);
$small = imagecreatetruecolor(100, 100);
imagecopyresampled($small, $large, 0, 0, 0, 0, 100, 100, 400, 400);
imagepng($small, 'https://m66.net/output.png');
imagedestroy($large);
imagedestroy($small);
이 방법은 imageAntialias () 에 의존하지 않고도 더 부드러운 드로잉 효과를 달성 할 수 있습니다.
imageAntialias () 함수는 일부 환경에서 유효하지 않으며, 이는 GD 라이브러리의 이전 버전 또는 호환되지 않는 이미지 유형 때문일 수 있습니다. PHP 8.0+ 프로젝트에서는 imageAntialias () 대신 이미지 스케일링 기술을 사용하여 안티 리아를 달성하는 것이 좋습니다.