홈페이지 호출 이미지를 만들 때, 홈페이지의 이미지 위치는 대개 디자이너가 지정하는 경우가 많기 때문에 고정된 크기의 이미지를 얻어야 하는 경우가 있습니다. 최신 릴리스 이미지를 호출하려면 무엇인지 알 수 없기 때문입니다. 고객이 업로드할 이미지의 비율이 너무 높기 때문에 이미지의 비율을 결정할 방법이 없는 경우가 종종 있습니다.프론트 엔드 페이지 작성자는 일반적으로 이미지가 넘치지 않도록 img 요소의 높이와 너비를 고정하는 방법을 사용합니다. 그러나 이미지의 비율이 요구되는 비율이 아닐 경우에는 호출 후 이미지가 변형되는 원인이 됩니다. 이는 페이지의 아름다움에 큰 영향을 미치게 됩니다. 크기가 조정된 이미지에는 필연적으로 공백이 생기기 마련입니다. 이렇게 하면 이미지가 변형되지는 않지만 사용자가 너무 많은 이미지를 보내는 경우 문제가 발생합니다. 키는 크지만 너비는 평균이고, 1:1 이미지로 압축하면 기본적으로 압축 후 이미지가 보이지 않습니다.
여기서 내 해결책은 이미지를 고정된 크기로 자르면 이미지가 변형되지 않고 공백이 늘어나서 채워지는 것입니다. bcastr을 사용한 친구는 bcastr을 알아야 합니다. 이미지 호출이 변형되지 않도록 보장합니다. 고정 크기 출력 이미지 프레임의 경우 소스 이미지에는 다음과 같은 상황이 있습니다.
1: 출력할 이미지의 높이와 너비가 소스 이미지의 높이와 너비보다 작다는 판단으로 작성됨 $new_width<$src_width && $new_height<$src_width
2: 출력할 이미지의 높이와 너비가 원본 이미지의 높이와 너비보다 크다고 판단하여 작성함 $new_width>$src_width && $new_height>$src_width
3: 1번과 2번 두 가지 유형, 즉 확대와 축소가 동시에 되는 상황과 동일성 판단을 제외한다. 1번과 2번의 경우 함수 처리 코드가 완전히 동일하므로 정리하면 된다. 하나의 처리 명령문으로
PHP 구현 코드
<?php를
제공합니다.
/*
*설명: 이미지를 변형하지 않고 이미지를 어떤 크기의 이미지로 자르는 기능입니다.
* 매개변수 설명: 처리할 이미지의 파일명을 입력하고, 새 이미지의 저장 파일명을 생성하고, 새 이미지의 너비를 생성하고, 새 이미지의 높이를 생성합니다.
* smallchick 님이 작성함
* 시간 2008-12-18
*/
// 원하는 크기의 이미지를 얻고, 누락된 부분을 늘이고, 변형도 없고, 여백도 없습니다.
함수 my_image_resize($src_file, $dst_file, $new_width, $new_height) {
if($new_width <1 || $new_height <1) {
echo "매개변수 너비 또는 높이 오류 !";
출구();
}
if(!file_exists($src_file)) {
echo $src_file . " 존재하지 않습니다 !";
출구();
}
//이미지 유형
$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만 지원합니다.";
출구();
}
//이미지 로드
스위치($type) {
사례 IMAGETYPE_JPEG:
$src_img=imagecreatefromjpeg($src_file);
부서지다;
케이스 IMAGETYPE_PNG:
$src_img=imagecreatefrompng($src_file);
부서지다;
케이스 IMAGETYPE_GIF:
$src_img=imagecreatefromgif($src_file);
부서지다;
기본:
echo "이미지 로드 오류!";
출구();
}
$w=이미지x($src_img);
$h=이미지($src_img);
$ratio_w=1.0 * $new_width / $w;
$ratio_h=1.0 * $new_height / $h;
$비율=1.0;
// 생성된 이미지의 높이와 너비는 원본보다 작거나 커집니다. 큰 비율로 확대하고 큰 비율로 축소하는 것이 원칙입니다(축소 비율은 작아집니다).
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // 경우 1, 가로 비율이 세로 방향보다 작은 경우, 세로 비율 기준에 따라 자르거나 확대합니다.
}또 다른 {
$비율 = $비율_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 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);
스위치($type) {
사례 IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100) // 이미지 저장
부서지다;
케이스 IMAGETYPE_PNG:
imagepng($new_img,$dst_file,100);
부서지다;
케이스 IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
부서지다;
기본:
부서지다;
}
} // 1이면 종료
// 2 대상 이미지의 한쪽은 원본 이미지보다 크고, 한쪽은 원본 이미지보다 작습니다. 먼저 일반 이미지를 확대한 다음 잘라냅니다.
// =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
또 다른{
$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);
스위치($type) {
사례 IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100) // 이미지 저장
부서지다;
케이스 IMAGETYPE_PNG:
imagepng($new_img,$dst_file,100);
부서지다;
케이스 IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
부서지다;
기본:
부서지다;
}
}//if3
}// 함수 종료
?>