php 미리 보기 그림 생 성 백 변 채 우기(등비 미리 보기 그림)
원본 그림,사 이 즈 는 600 입 니 다.×366:
최종 생 성 효과 도:
코드 가 상대 적 으로 길 어 요.다음은 간단하게 생각 을 말씀 드 리 겠 습 니 다.
먼저 원본 그림 을 비례 에 따라 미리 보기 그림 을 만 들 고 너비 가 160 보다 크 지 않 으 며 높이 가 120 보다 크 지 않 습 니 다.예 를 들 어 위의 그림 에서 선생님 은 160 이 됩 니 다.×98 의 미리 보기 그림.새로 만 들 기 160×120 개의 흰색 배경 그림 은 이전 단계 에 생 성 된 미리 보기 그림 을 이 그림 에 가운데 놓 으 면 OK 입 니 다.최종 코드 는 다음 과 같 습 니 다.
// , ,
$src_path = '1.jpg';
//
$width = 160;
//
$height = 120;
//
$src_image = imagecreatefromstring(file_get_contents($src_path));
$src_width = imagesx($src_image);
$src_height = imagesy($src_image);
//
$tmp_image_width = 0;
$tmp_image_height = 0;
if ($src_width / $src_height >= $width / $height) {
$tmp_image_width = $width;
$tmp_image_height = round($tmp_image_width * $src_height / $src_width);
} else {
$tmp_image_height = $height;
$tmp_image_width = round($tmp_image_height * $src_width / $src_height);
}
$tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);
//
$final_image = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($final_image, 255, 255, 255);
imagefill($final_image, 0, 0, $color);
$x = round(($width - $tmp_image_width) / 2);
$y = round(($height - $tmp_image_height) / 2);
imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);
//
header('Content-Type: image/jpeg');
imagejpeg($final_image);