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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
이미지 크기 출력하는 php 코드는 무엇인가요?

QA

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

답변 3

본문

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

이 질문에 댓글 쓰기 :

답변 3

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

 

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

아~~죄송합니다~~ 아래 처럼하니 출력이 되네요~~해보지 않은 것은 아닙니다~~잘 못해서 출력이 제대로 안되거지요~~`다시 한번 감사드립니다~~<img style="display:none" src="https://dawayo.net/gallery/20241111_130150.jpg" onload="outerHTML='<span>' + naturalWidth + 'x' +  naturalHeight + '</span>'">~디렉토리 내의 모든 이미지의 크기를 출력하고자해서 제대로 출력이 안되었습니다

백과 프론트는 다를 수 있습니다.
거의 대부분 백과 프론트의 정보는 일치하지만

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

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

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

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

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

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

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

 

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

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

 

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

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

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 정보에서 회전이 필요한 경우 가로와 세로 크기를 교환하여 올바른 크기를 계산.

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

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

PHP 8.0 이상에서도 여전히 존재합니다.
그러나 Orientation 정보가 출력되지 않는 문제는 
if_read_data 함수가 PHP 8.0 이상에서 지원된다하더라도,
여러 문제들을 점검해야 Orientation 정보를 제대로 가져올 수 있습니다.
특히 EXIF 확장이 활성화되어 있는지,
이미지 파일 형식과 EXIF 데이터가 유효한지 확인하세요.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로