PHP를 사용하여 이미지 자르기를 처리 할 때 ImageGetClip 함수는 종종 원래 이미지에서 지정된 영역을 자르는 데 사용됩니다. 그러나 일부 개발자는 실제로 사용하면 다음과 같습니다. 이 기사는이 일반적인 문제에 중점을두고 가능한 원인을 깊이 분석하며 실용적인 해결책을 제공합니다.
다음 코드가 있다고 가정합니다.
$src = imagecreatefromjpeg('https://gitbox.net/images/sample.jpg');
$clip = imagecrop($src, ['x' => 50, 'y' => 50, 'width' => 200, 'height' => 100]);
if ($clip !== FALSE) {
imagejpeg($clip, 'https://gitbox.net/output/cropped.jpg');
imagedestroy($clip);
}
imagedestroy($src);
이론적으로, 우리는 자른 이미지의 크기가 200x100 픽셀이되기를 원합니다. 그러나 때로는 출력이 199x100 일 수 있으며 심지어 작물 실패 ( 거짓 반환)도 가능합니다.
자르려고하는 영역이 원본 이미지의 경계를 초과하면 ImageCrop이 False를 반환합니다. x + 너비 <= 원본 이미지 너비 와 y + 높이 <= 원본 이미지 높이가 작물 고장을 피하기위한 전제 조건인지 확인하십시오.
이미지 처리 중에 PHP는 내부적으로 정수 픽셀 포인트를 처리하기 때문에 일부 에지 값 처리는 오프셋 될 수 있습니다. 특히 부동 소수점 계산이 정수로 변환되는 시나리오에서.
일부 개발자는 <Img> 태그의 확대 이미지 주소에서 소스 이미지를 얻습니다. 이 줌은 클라이언트에 의해 구현되며 서버는 원래 크기를 여전히 처리하여 작물 면적 편차를 초래합니다.
getImagesize () 함수를 사용하여 이미지의 실제 너비와 높이를 확인하여 자르기 영역이 경계를 초과하지 않도록하십시오.
list($width, $height) = getimagesize('https://gitbox.net/images/sample.jpg');
자르기 매개 변수가 계산에서 나온 경우 (예 : 마우스를 영역을 선택하기 위해 마우스 드래그하는 등) Floor () 또는 Round ()를 사용하여 다른 반올림 방법으로 인해 1 픽셀 오류를 피하기 위해 변환 로직을 명확히하는 것이 좋습니다.
$x = floor($x);
$y = floor($y);
$w = floor($w);
$h = floor($h);
imageCrop () 가 불안정 해지면 자르기 로직을 수동으로 구현할 수 있습니다.
$dst = imagecreatetruecolor($w, $h);
imagecopy($dst, $src, 0, 0, $x, $y, $w, $h);
imagejpeg($dst, 'https://gitbox.net/output/alternative.jpg');
imagedestroy($dst);
이것은 imageCrop () 의 통제 할 수없는 동작을 피하고 더 높은 호환성을 얻을 수 있습니다.
이미지 자르기는 단순 해 보일 수 있지만 실제 개발에서는 이미지 소스, 브라우저 동작 및 서버 처리 방법의 차이로 인해 예상보다 더 문제가 될 수 있습니다. 이 기사에서 소개 된 판단 및 솔루션 전략은 ImageGetClip 또는 ImageCrop을 사용할 때 예상 크기를보다 원활하게 충족시키는 이미지를 얻는 데 도움이되기를 희망합니다.
이러한 기술을 마스터하면 온라인 버그를 줄일 수있을뿐만 아니라 PHP 이미지 처리에 대한 더 깊은 이해를 제공합니다.