답변 3개
이미지온로드 이벤트로 한번 빼 보셈. 자바스크립트라기 보다는 html 에서 직접 해도 됩니다.
<img style="display:none" src="이미지경로" onload="outerHTML='<span>' + naturalWidth + 'x' + naturalHeight + '</span>'">
답변에 대한 댓글 4개
해보지도 않으시고 왜 이미지만 출력하는 거라고 속단하시는 거죠?
거의 대부분 백과 프론트의 정보는 일치하지만
예컨대 하리수의 성별을 백에서는 남성으로 프론트에서는 여성으로 달리 추출해 내지요.
이번도 그런 극소수의 경우입니다. 이미지 메타정보를 변경하는 프로그램이 있을 거에요. 그런 걸로 수정하세요.
댓글을 작성하려면 로그인이 필요합니다.
이 문제는 이미지의 EXIF 정보를 기반으로 출력된 이미지 크기가
회전 정보에 의해 잘못된 방향으로 출력되는 경우일 것입니다.
EXIF 데이터에는 이미지의 회전 방향이 저장되어 있으며,
PHP의 exif_read_data 함수를 사용하면 이 데이터를 읽어올 수 있을 것입니다.
이미지의 회전 방향을 확인한 후,
실제 이미지의 가로 및 세로 크기를 올바르게 계산하여 출력해야 합니다.
*EXIF 정보를 이용해 이미지 크기를 올바르게 출력하려면
다음과 같은 예시 코드를 추가로 사용할 수 있음
</p>
<p>function get_image_dimensions($image_path) {
$exif = @exif_read_data($image_path);
if ($exif && isset($exif['Orientation'])) {
$orientation = $exif['Orientation'];
list($width, $height) = getimagesize($image_path);
if (in_array($orientation, [5, 6, 7, 8])) {
// Swap width and height for rotated images
return [$height, $width];
}
}
// Default case
return getimagesize($image_path);
}</p>
<p>$image_path = 'path/to/your/image.jpg';
list($width, $height) = get_image_dimensions($image_path);
echo "Image dimensions: {$width} x {$height}";</p>
<p>
*해결 방안:
- PHP의 exif_read_data 함수를 사용하여 이미지의 회전 방향 정보를 확인.
- getimagesize로 이미지를 읽고,
EXIF 정보에서 회전이 필요한 경우 가로와 세로 크기를 교환하여 올바른 크기를 계산.
- 아래 예제 코드를 이미지 크기 출력 로직에 통합하여 문제를 해결할 수 있음.
</p>
<p>function get_correct_image_size($image_path) {
// 이미지 파일이 존재하는지 확인
if (!file_exists($image_path)) {
throw new Exception("이미지 파일이 존재하지 않습니다: {$image_path}");
}</p>
<p> // EXIF 데이터를 읽음
$exif = exif_read_data($image_path, 0, true);
if ($exif && isset($exif['Orientation'])) {
list($width, $height) = getimagesize($image_path);
$orientation = $exif['Orientation'];</p>
<p> // 회전된 이미지의 경우 가로와 세로 교환
if (in_array($orientation, [5, 6, 7, 8])) {
return [$height, $width];
}
return [$width, $height];
}</p>
<p> // 기본 이미지 크기 반환
$size = getimagesize($image_path);
if ($size === false) {
throw new Exception("이미지 크기를 읽을 수 없습니다: {$image_path}");
}</p>
<p> return [$size[0], $size[1]];
}</p>
<p>// 테스트 실행
try {
$image_path = 'path/to/your/image.jpg'; // 이미지 경로
list($width, $height) = get_correct_image_size($image_path);
echo "올바른 이미지 크기: {$width} x {$height}";
} catch (Exception $e) {
echo "오류 발생: " . $e->getMessage();
}</p>
<p>
답변에 대한 댓글 4개
그러나 Orientation 정보가 출력되지 않는 문제는
if_read_data 함수가 PHP 8.0 이상에서 지원된다하더라도,
여러 문제들을 점검해야 Orientation 정보를 제대로 가져올 수 있습니다.
특히 EXIF 확장이 활성화되어 있는지,
이미지 파일 형식과 EXIF 데이터가 유효한지 확인하세요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
그런데 getimagesize 함수를 써도 가로 3000 세로 4000 픽셀의 이미지의 크기가 가로가 4000, 세로가 3000 으로 출력되네요~~~
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인