2015-03-27 2 views
7

Я использую скрипт PHP, который загружает изображение, затем получает размеры с помощью getImageSize() PHP, а затем делает вещи для изображения в соответствии с ориентацией изображений (портрет или пейзаж).PHP getimagesize() смешивает ширину и высоту

Однако (PHP версии 5.4.12) на некоторые .jpg файлы он получает высоту и ширину, как они есть, и в некоторых (взято с iPhone) он меняет их, думая, портретные фотографии на самом деле пейзаж.
Это происходит не только на моем локальном Wampserver, но и на удаленном сервере (с другой версией PHP).

Кто-нибудь понятия, как

1) ремонтировать или
2) найти способ обойти эту проблему?

+0

Как вы работаете с результатом getimagesize? Вы всегда получаете большее и меньшее значение (за исключением квадратных изображений) и должны работать соответственно. Покажите нам свой код, который дает проблему –

+0

У меня такая же проблема. У меня есть Wamp с PHP 5.5. Это похоже на ошибку во встроенной интерпретации PHP. –

+0

Кто-нибудь нашел решение для этого? У меня точно такая же проблема – MeV

ответ

6

Некоторые камеры включают в себя тег ориентации в разделе метаданных самого файла. Это значит, что само устройство может показывать его в правильной ориентации каждый раз, независимо от ориентации изображения в его исходных данных.

Похоже, что Windows не поддерживает чтение этого тега ориентации и вместо этого просто считывает данные пикселя и отображает его как есть.

Решение будет либо изменить ориентацию тег метаданных смиренных изображений на основе каждого изображения, или exif_read_data() функция

Используйте PHP для чтения ориентации и ориентировать изображение соответственно следующий образом:

<?php 
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name'])); 
$exif = exif_read_data($_FILES['image_upload']['tmp_name']); 
if(!empty($exif['Orientation'])) { 
    switch($exif['Orientation']) { 
     case 8: 
      $image = imagerotate($image,90,0); 
      break; 
     case 3: 
      $image = imagerotate($image,180,0); 
      break; 
     case 6: 
      $image = imagerotate($image,-90,0); 
      break; 
    } 
} 
// $image now contains a resource with the image oriented correctly 
?> 

Ссылки:

+0

Мы говорим о ширине/высоте не о ориентации. нет? – MeV

+0

Неправильная ориентация изображения приведет к смешению ширины/высоты. –

+0

Спасибо за ответ. Я проверил изображение EXIF, но ориентация изображения 1, поэтому мне кажется, что это не так. – MeV

Смежные вопросы