PHP 이미지 처리 분야에서 자르기 이미지는 매우 일반적인 요구 사항입니다. 여러 번, 우리는 지정된 영역을 자르면 필요할뿐만 아니라 변형을 피하기 위해 자른 이미지 비율을 변경하지 않기를 원합니다. 이 기사는이 기능을 구현하는 방법을 설명하고 실제 코드 예제를 제공하는 가상 기능 ImageGetClip 에 중점을 둘 것입니다.
ImageGetClip 함수 (여기서 사용자 정의 함수를 가정)는 주로 이미지에서 지정된 영역을 자르는 데 사용됩니다. PHP의 내장 GD 라이브러리에는이 기능이 없지만 구현을 사용자 정의하고 자르기 기능을 완료 할 수 있습니다.
핵심 아이디어는 원래 이미지 자원을 통과하고 시작점, 작물 너비 및 높이의 좌표를 자르고 자른 이미지 자원을 반환합니다.
자르기 동안 비율을 변경하지 않은 상태로 유지하는 핵심은 대상 작물 크기와 원래 이미지 크기를 기반으로 적절한 작물 상자를 계산하는 것입니다. 특정 단계는 다음과 같습니다.
원본 이미지의 너비와 높이를 가져옵니다.
목표 작물 폭과 높이 비율에 따라 작물 상자의 크기를 결정하십시오.
작물 상자의 시작 좌표를 계산하여 자르기 상자가 이미지 내부에 있는지 확인하거나 필요에 따라 위치를 조정하십시오).
클리핑 기능을 사용하여 영역을 추출하십시오.
다음 샘플 코드는 PHP에서 ImageGetClip 함수를 구현하고 스케일 자르기를 유지하는 방법을 보여줍니다. 이 예제는 클립 대상 크기가 $ clipwidth 및 $ clipheight 라고 가정합니다.
<?php
function imagegetclip($srcImage, $clipWidth, $clipHeight) {
// 원래 이미지 너비와 높이를 얻으십시오
$srcWidth = imagesx($srcImage);
$srcHeight = imagesy($srcImage);
// 대상 비율을 계산하십시오
$targetRatio = $clipWidth / $clipHeight;
$srcRatio = $srcWidth / $srcHeight;
// 클리핑 영역 크기를 계산하십시오,비율을 유지하십시오
if ($srcRatio > $targetRatio) {
// 원본 이미지의 너비가 크다,높이에 의해 자르기
$newHeight = $srcHeight;
$newWidth = (int)($srcHeight * $targetRatio);
$srcX = (int)(($srcWidth - $newWidth) / 2);
$srcY = 0;
} else {
// 원본 이미지는 비교적 높습니다,너비로 자르십시오
$newWidth = $srcWidth;
$newHeight = (int)($srcWidth / $targetRatio);
$srcX = 0;
$srcY = (int)(($srcHeight - $newHeight) / 2);
}
// 대상 이미지 리소스를 만듭니다
$clipImage = imagecreatetruecolor($clipWidth, $clipHeight);
// 목표 크기에 대한 작물 및 규모
imagecopyresampled(
$clipImage, // 대상 이미지
$srcImage, // 소스 이미지
0, 0, // 대상 출발점 좌표
$srcX, $srcY, // 소스 이미지裁剪起点
$clipWidth, $clipHeight, // 목표 너비와 높이
$newWidth, $newHeight // 소스 클리핑 면적 폭과 높이
);
return $clipImage;
}
// 사용의 예
$imagePath = 'https://gitbox.net/images/sample.jpg'; // 사용gitbox.net도메인 이름을 바꾸십시오
$srcImage = imagecreatefromjpeg($imagePath);
$clipWidth = 300;
$clipHeight = 200;
$clippedImage = imagegetclip($srcImage, $clipWidth, $clipHeight);
// 출력 자른 그림
header('Content-Type: image/jpeg');
imagejpeg($clippedImage);
// 자원을 자유롭게합니다
imagedestroy($srcImage);
imagedestroy($clippedImage);
?>
위의 코드는 자른 영역을 계산하여 자른 이미지가 변형을 피하기 위해 목표 너비 및 높이 비율에 따라 엄격하게 자르도록합니다.
ImageCopyResAmpled 기능은 이미지를 자르기뿐만 아니라 출력 크기가 기대에 부응 할 수 있도록 스케일링을 구현합니다.
gitbox.net을 사용하여 샘플 URL의 도메인 이름을 바꾸므로 예제를 직접 사용하기에 편리합니다.