채택완료

이미지 크기 출력하는 php 코드는 무엇인가요?

이미지 크기를 출력하려고 하는데요~~ 3000 * 4000 이미지를 크기를 출력하면  4000 * 3000 으로 출력이 되네요~~ exif 정보를 이용하는 것이라고 하는데~도저히 되질 않네요~~~게시판이 아니구 ~일반페이지에서 이미지 크기를 출력하고자 합니다~~~

답변 3개 / 댓글 9개

채택된 답변
+20 포인트

이미지온로드 이벤트로 한번 빼 보셈. 자바스크립트라기 보다는 html 에서 직접 해도 됩니다.

 

<img style="display:none" src="이미지경로" onload="outerHTML='<span>' + naturalWidth + 'x' +  naturalHeight + '</span>'">

답변에 대한 댓글 4개

답변 감사합니다~~ 그런데 이미지를 출력하는 것이 아니라 이미지의 가로와 세로를 출력하고 싶어요~~
가로 세로 출력 맞는데요?
해보지도 않으시고 왜 이미지만 출력하는 거라고 속단하시는 거죠?
아~~죄송합니다~~ 아래 처럼하니 출력이 되네요~~해보지 않은 것은 아닙니다~~잘 못해서 출력이 제대로 안되거지요~~`다시 한번 감사드립니다~~<img style="display:none" src="https://dawayo.net/gallery/20241111_130150.jpg" onload="outerHTML='<span>' + naturalWidth + 'x' + naturalHeight + '</span>'">~디렉토리 내의 모든 이미지의 크기를 출력하고자해서 제대로 출력이 안되었습니다
백과 프론트는 다를 수 있습니다.
거의 대부분 백과 프론트의 정보는 일치하지만

예컨대 하리수의 성별을 백에서는 남성으로 프론트에서는 여성으로 달리 추출해 내지요.
이번도 그런 극소수의 경우입니다. 이미지 메타정보를 변경하는 프로그램이 있을 거에요. 그런 걸로 수정하세요.

이 문제는 이미지의 EXIF 정보를 기반으로 출력된 이미지 크기가

회전 정보에 의해 잘못된 방향으로 출력되는 경우일 것입니다.

EXIF 데이터에는 이미지의 회전 방향이 저장되어 있으며,

PHP의 exif_read_data 함수를 사용하면 이 데이터를 읽어올 수 있을 것입니다.

 

이미지의 회전 방향을 확인한 후,

실제 이미지의 가로 및 세로 크기를 올바르게 계산하여 출력해야 합니다.

 

*EXIF 정보를 이용해 이미지 크기를 올바르게 출력하려면

  다음과 같은 예시 코드를 추가로 사용할 수 있음

Copy
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);
}

$image_path = 'path/to/your/image.jpg';
list($width, $height) = get_image_dimensions($image_path);
echo "Image dimensions: {$width} x {$height}";

 

*해결 방안:

- PHP의 exif_read_data 함수를 사용하여 이미지의 회전 방향 정보를 확인.

- getimagesize로 이미지를 읽고,

  EXIF 정보에서 회전이 필요한 경우 가로와 세로 크기를 교환하여 올바른 크기를 계산.

- 아래 예제 코드를 이미지 크기 출력 로직에 통합하여 문제를 해결할 수 있음.

Copy
function get_correct_image_size($image_path) {
    // 이미지 파일이 존재하는지 확인
    if (!file_exists($image_path)) {
        throw new Exception("이미지 파일이 존재하지 않습니다: {$image_path}");
    }

    // EXIF 데이터를 읽음
    $exif = exif_read_data($image_path, 0, true);
    if ($exif && isset($exif['Orientation'])) {
        list($width, $height) = getimagesize($image_path);
        $orientation = $exif['Orientation'];

        // 회전된 이미지의 경우 가로와 세로 교환
        if (in_array($orientation, [5, 6, 7, 8])) {
            return [$height, $width];
        }
        return [$width, $height];
    }

    // 기본 이미지 크기 반환
    $size = getimagesize($image_path);
    if ($size === false) {
        throw new Exception("이미지 크기를 읽을 수 없습니다: {$image_path}");
    }

    return [$size[0], $size[1]];
}

// 테스트 실행
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();
}

답변에 대한 댓글 4개

답변 감사합니다~~그런데 이리저리 해보니 php8.3.15인데요~~php8.0 이상에서 exif_read_data 함수가 제거되었나요~~Orientation 정보가 출력이 안되네요~~
PHP 8.0 이상에서도 여전히 존재합니다.
그러나 Orientation 정보가 출력되지 않는 문제는 
if_read_data 함수가 PHP 8.0 이상에서 지원된다하더라도,
여러 문제들을 점검해야 Orientation 정보를 제대로 가져올 수 있습니다.
특히 EXIF 확장이 활성화되어 있는지,
이미지 파일 형식과 EXIF 데이터가 유효한지 확인하세요.
glitter0gim 님~~` 제가 다시 한번 확인해보겠습니다~~답변 감사합니다~

https://blog.naver.com/questzz/220247230285

간단하게는 해당 함수를 참고하시면 될 거 같습니다.

답변에 대한 댓글 1개

답변감사합니다~~
그런데 getimagesize 함수를 써도 가로 3000 세로 4000 픽셀의 이미지의 크기가 가로가 4000, 세로가 3000 으로 출력되네요~~~

답변을 작성하려면 로그인이 필요합니다.