썸네일 이미지 생성 문의입니다
관련링크
본문
아래에서 이미지의 가로를 400픽셀로 해서 썸네일 생성을 하고 싶은데 4000*3000 이미지는 문제가 없는데 3000*4000 이미지는 가로를 3000을 이용해서 계산되지않고 4000을 기준으로 해서 4000이 나모면서 세로가 400 보다 작은 썸네일이 생기네요~~ 그리고 생성된 이미지가 원본이미지의 방향에서 반시계방향으로 90도 회전한 형태로 생기네요~~~~ 뭐가 문제인가요~
<?php
// 데이터 디렉토리 경로
$data_dir = G5_DATA_PATH . '/file';
// 모든 게시판 ID 디렉토리 가져오기
$board_dirs = glob($data_dir . '/*', GLOB_ONLYDIR);
// 썸네일 크기 설정
$thumb_width = 400; // 썸네일 이미지 넓이
$crop_size = 3000; // 크롭할 이미지 크기
// 각 게시판 디렉토리에서 이미지 파일 처리
foreach ($board_dirs as $board_dir) {
$bo_table = basename($board_dir); // 게시판 ID 추출
$images = glob($board_dir . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE); // 이미지 파일 목록 가져오기
foreach ($images as $image) {
$filename = basename($image); // 파일 이름 추출
// 접두어가 'thumb-'가 아닌 경우에만 처리
if (strpos($filename, 'thumb-') === false) {
$save_path = $board_dir; // 썸네일을 저장할 위치 (게시판 ID 디렉토리)
// 원본 이미지의 크기 가져오기
list($original_width, $original_height) = getimagesize($image);
// 중앙을 기준으로 크롭할 위치 계산
$crop_x = max(0, ($original_width - $crop_size) / 2);
$crop_y = max(0, ($original_height - $crop_size) / 2);
$crop_width = min($crop_size, $original_width);
$crop_height = min($crop_size, $original_height);
// 크롭된 이미지 리소스 생성
$cropped_image = imagecreatetruecolor($crop_width, $crop_height);
$source_image = imagecreatefromstring(file_get_contents($image));
// 이미지 크롭
imagecopyresampled($cropped_image, $source_image, 0, 0, $crop_x, $crop_y, $crop_width, $crop_height, $crop_width, $crop_height);
// 썸네일 크기 계산 (400x400으로 리사이즈)
$thumb_height = $thumb_width; // 썸네일의 세로 크기
// 새로운 썸네일 이미지 리소스 생성
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);
// 썸네일 리사이즈
imagecopyresampled($thumb, $cropped_image, 0, 0, 0, 0, $thumb_width, $thumb_height, $crop_width, $crop_height);
// 썸네일 이름 생성
$thumb_name = "thumb-{$bo_table}-" . pathinfo($filename, PATHINFO_FILENAME) . "_{$thumb_width}x{$thumb_height}.jpg";
imagejpeg($thumb, $save_path . '/' . $thumb_name);
imagedestroy($thumb); // 메모리 해제
imagedestroy($source_image); // 메모리 해제
imagedestroy($cropped_image); // 메모리 해제
// 썸네일 URL 생성
$save_url = G5_DATA_URL . '/file/' . $bo_table; // 이미지를 저장할 위치 URL
$original_url = $save_url . '/' . $filename; // 원본 이미지 URL
// 썸네일 출력 (클릭 시 원본 이미지 팝업)
if (isset($thumb_name)) {
echo '<div class="grid-item thumbnail">';
echo '<a href="' . $original_url . '" target="_blank" onclick="window.open(\'' . $original_url . '\', \'popup\', \'width=800,height=600\'); return false;">';
echo '<img src="' . $save_url . '/' . $thumb_name . '" alt="썸네일" style="max-width: 100%; height: auto;">'; // 썸네일 이미지 출력
echo '</a>';
echo '</div>';
}
}
}
}
?>
답변을 작성하시기 전에 로그인 해주세요.