>  기사  >  백엔드 개발  >  EXIF 데이터를 기반으로 이미지 회전이 iPhone 및 Android 장치에서 작동하지 않는 이유는 무엇입니까?

EXIF 데이터를 기반으로 이미지 회전이 iPhone 및 Android 장치에서 작동하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-27 18:38:30625검색

Why is rotating images based on EXIF data not working for iPhones and Android devices?

PHP에서 EXIF ​​데이터 읽기 및 이미지 방향 조정

문제:

업로드된 이미지 회전 EXIF 데이터를 사용한 방향 기반은 iPhone 및 Android의 이미지에 대해 올바르게 작동하지 않습니다.

코드:

다음 코드는 EXIF를 기반으로 이미지를 회전하려고 시도합니다. 방향:

<code class="php">if(move_uploaded_file($_FILES['photo']['tmp_name'], $upload_path . $newfilename)){
            chmod($upload_path . $newfilename, 0755);
            $exif = exif_read_data($upload_path . $newfilename);
            $ort = $exif['IFD0']['Orientation'];
            switch($ort)
            {

                case 3: // 180 rotate left
                    $image->imagerotate($upload_path . $newfilename, 180, -1);
                    break;


                case 6: // 90 rotate right
                    $image->imagerotate($upload_path . $newfilename, -90, -1);
                    break;

                case 8:    // 90 rotate left
                    $image->imagerotate($upload_path . $newfilename, 90, -1);
                    break;
            }
            imagejpeg($image, $upload_path . $newfilename, 100);
            $success_message = 'Photo Successfully Uploaded';
        }else{
            $error_count++;
            $error_message = 'Error: Upload Unsuccessful<br />Please Try Again';
        }</code>

var_dump($exif) 출력은 iPhone 및 Android 이미지의 EXIF ​​데이터에 Orientation 필드가 있음을 나타냅니다.

해결책:

이 문제를 해결하려면 iPhone 및 Android에서 사용되는 특정 방향 값을 처리하도록 방향 수정 기능을 최적화해야 합니다.

다음은 GD를 사용하여 방향 수정 기능을 개선한 버전입니다.

<code class="php">function image_fix_orientation(&amp;$image, $filename) {
    $exif = exif_read_data($filename);

    if (!empty($exif['Orientation'])) {
        switch ($exif['Orientation']) {
            case 3:
                $image = imagerotate($image, 180, 0);
                break;

            case 6:
                $image = imagerotate($image, 90, 0);
                break;

            case 8:
                $image = imagerotate($image, -90, 0);
                break;
        }
    }
}</code>

이 기능을 사용하려면 저장하거나 표시하기 전에 이미지에 적용하기만 하면 됩니다.

<code class="php">image_fix_orientation($image, $upload_path . $newfilename);
imagejpeg($image, $upload_path . $newfilename, 100);</code>

이제 이 최적화된 기능은 EXIF ​​방향 데이터를 기반으로 iPhone 및 Android의 이미지를 올바르게 회전해야 합니다. .

위 내용은 EXIF 데이터를 기반으로 이미지 회전이 iPhone 및 Android 장치에서 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.