썸네일 이미지 생성 문의입니다
관련링크
본문
아래에서 이미지의 가로를 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>';
}
}
}
}
?>
답변 1
. . . 안녕하세요.
질문이 흥미롭고 중요한 내용임은 분명하지만, 몇 가지 부분에서 설명이 조금 더 명확해져야
'냑'의 전문인들께서 도움을 드리기가 수월하지 않을까 싶습니다.
코드에서 이미지의 가로/세로 크기와 크롭, 리사이즈 과정에서 문제가 발생한다고 하셨는데,
구체적으로 어떤 결과가 나오는지~
예로, 예시 이미지와 출력된 썸네일을 보여주시면 더 이해하기 쉬울 것 같습니다.
또한, "이미지가 반시계 방향으로 90도 회전된다"고 하셨는데,
EXIF 메타데이터 문제인지 확인해보셨는지,
아니면 다른 원인이 있다고 생각하시는지 추가 정보가 있으면 좋지 않을까요.
질문이 다소 길게 느껴지는데,
질문의 핵심과 관련 없는 부분은 생략하거나 간략히 줄이시면,
답변하실 분들이 더 빠르게 문제를 파악할 수 있지 않을까 싶습니다.
또한, 문제 해결을 위해 어떤 시도를 해보셨는지~
예로, 특정 함수 수정이나 다른 접근법 사용 등을 공유해 주시면
더 구체적인 도움을 받으실 수 있지 않을까 싶습니다.
답변을 작성하시기 전에 로그인 해주세요.