홈페이지 호출 이미지를 만들 때, 홈페이지의 이미지 위치는 대개 디자이너가 지정하는 경우가 많기 때문에 고정된 크기의 이미지를 얻어야 하는 경우가 있습니다. 최신 릴리스 이미지를 호출하려면 무엇인지 알 수 없기 때문입니다. 고객이 업로드할 이미지의 비율이 너무 높기 때문에 이미지의 비율을 결정할 방법이 없는 경우가 종종 있습니다.프론트 엔드 페이지 작성자는 일반적으로 이미지가 넘치지 않도록 img 요소의 높이와 너비를 고정하는 방법을 사용합니다. 그러나 이미지의 비율이 요구되는 비율이 아닐 경우에는 호출 후 이미지가 변형되는 원인이 됩니다. 이는 페이지의 아름다움에 큰 영향을 미치게 됩니다. 크기가 조정된 이미지에는 필연적으로 공백이 생기기 마련입니다. 이렇게 하면 이미지가 변형되지는 않지만 사용자가 너무 많은 이미지를 보내는 경우 문제가 발생합니다. 키는 크지만 너비는 평균이고, 1:1 이미지로 압축하면 기본적으로 압축 후 이미지가 보이지 않습니다.
내 해결책은 이미지를 고정된 크기로 자르는 것입니다. 그러면 이미지가 변형되지 않으며, 이미지는 항상 공백 없이 채워집니다. bcastr은 변형 없이 이미지 호출을 보장한다는 것을 알고 있습니다. 고정 크기 출력 이미지 프레임의 경우 원본 이미지는 다음과 같은 상황에 처해 있습니다.
1: 출력할 이미지의 높이와 너비가 이미지의 높이와 너비보다 작습니다. $new_width<$src_width && $new_height<$src_width 판단으로 작성된 원본 이미지
2: 출력할 이미지의 높이와 너비가 원본 이미지의 높이와 너비보다 크다는 판단 $new_width> ;$src_width && $new_height>$src_width
3: 1차, 2차 2종 제외, 즉 확대와 축소를 동시에 하는 상황에 더해 동등성 판단
1과 2의 경우, 함수 처리 코드는 완전히 동일하므로
PHP 구현 코드를 제공하는
코드 복사 코드는 다음과 같습니다. 다음과 같습니다:
/*
* 설명: 이미지를 변형하지 않고 어떤 크기의 이미지로도 자르는 기능입니다.
* 매개변수 설명: 해당 파일을 입력하세요. 이름, 새 이미지의 저장 파일 이름 생성, 새 이미지의 너비 생성, 새 이미지의 높이 생성
* 작성자: smallchicken
* 시간 2008-12-18
*/
// 변형이나 공백을 남기지 않고 필요한 부분을 늘려 크고 작은 이미지를 가져옵니다.
function my_image_resize($src_file, $dst_file , $new_width , $new_height) {
if ($new_width <1 || $new_height < ;1) {
echo "params 너비 또는 높이 오류 !"
exit()
}
if(!file_exists($src_file) ) {
echo $src_file . "이(가) 존재하지 않습니다.";
exit();
}
// 이미지 유형
$type=exif_imagetype($src_file); support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo "이 유형의 이미지는 지원하지 않습니다. jpg, gif 또는 png만 지원합니다." ;
exit();
}
//이미지 로드
switch($type) {
case IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file)
;
case IMAGETYPE_PNG:
$ src_img=imagecreatefrompng($src_file);
break;
case IMAGETYPE_GIF:
$src_img=imagecreatefromgif($src_file); 기본값:
echo "이미지 로드 오류!"
exit()
$w=imagesx($src_img)
$h=imagesy($src_img); >$ratio_w=1.0 * $new_width / $w ;
$ratio_h=1.0 * $new_height / $h;
$ratio=1.0
// 생성된 이미지의 높이와 너비가 더 작거나 큰 비율로 확대하고, 큰 비율로 축소하는 것이 원칙입니다(축소 비율은 상대적으로 작습니다)
if( ($ratio_w < 1 && $ratio_h < 1) || ( $ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // 경우 1, 너비 비율이 높이 방향보다 작습니다. , 높이 비율 표준에 따라 자르기 또는 확대
}else {
$ratio = $ratio_w ;
}
// 가로 세로 비율이 대상 요구 사항을 정확히 충족하는 중간 임시 이미지 정의
$inter_w=(int)($new_width / $ratio );
$inter_h=(int) ($new_height / $ratio)
$inter_img=imagecreatetruecolor($inter_w , $inter_h)
imagecopy ($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h)
// 대상 이미지의 크기만큼 최대 변 길이를 갖는 임시 이미지를 생성합니다. $ratio
// 새 이미지 정의
$new_img=imagecreatetruecolor($new_width,$new_height)
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h) ;
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // 이미지 저장
case IMAGETYPE_PNG :
imagepng( $new_img,$dst_file,100);
break;
case IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
default:
break; 🎜>}
} // 1이면 종료
// 2 대상 이미지의 한 면은 원본 이미지보다 크고, 한 면은 원본 이미지보다 작습니다. 먼저 일반 이미지를 확대한 다음 잘라냅니다. 그것은
// =if( ($ratio_w < 1 && $ratio_h > 1 ) || ($ratio_w >1 && $ratio_h <1) )
else{
$ratio=$ ratio_h>$ratio_w? $ratio_h : $ratio_w; //비율이 큰 값을 취함
//대상 이미지와 높이나 너비가 동일한 큰 중간 이미지를 정의한 후 원본 이미지를 확대합니다
$inter_w=(int)($w * $ratio);
$inter_h=(int) ($h * $ratio)
$inter_img=imagecreatetruecolor($inter_w , $inter_h)
/ /크기 조정 후 원본 이미지 자르기
imagecopyresampled($inter_img,$src_img,0, 0,0,0,$inter_w,$inter_h,$w,$h)
//새 이미지 정의
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy($ new_img, $inter_img, 0,0,0,0,$new_width,$new_height)
switch($type); >case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100) / / 이미지 저장
break
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100); break;
case IMAGETYPE_GIF :
imagegif($new_img,$dst_file, 100)
break;
기본값:
break; >}// 함수 종료
?>
위 내용은 관련 내용을 포함하여 PHP에서 그림을 고정된 크기로 자르는 코드 방법을 소개한 내용이 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.