Дело 100% в EXIF. Сегодня какраз столкнулся с аналогом фотография повернута на 90 градусов, в EXIF стоит Orientation 90 СW.
При просмотре в теле страницы показывает перевернутой, а при "открыть картинку в новой вкладке" показывает картинку повернутой правильно. Т.е. современные браузеры когда показывают только картинку берут ее (в моем случае повернутую набок) смотрят на EXIF и поворачивают как надо.
Сравните к примеру:
filarmonia23.com/1.php <html>
<head>
<title>EXIF ORIENTATION TEST</title>
</head>
<body>
<img src="/image.jpg" />
</body>
</html>
и само фото
filarmonia23.com/image.jpg (кстати в ИЕ 9 показывает нормально т.е. ему плевать на EXIF)
Для проекта мы рассматривали 2 варианта решения:
Первый вариант - при загрузке фото удалять все данные EXIF
Второй вариант - при загрузке фото если есть данные EXIF - повернуть фото согласно данных.
Остановились на 2-м варианте
$img = new Imagick($uploaded_img);
$orientation = $img->getImageOrientation();
switch($orientation) {
case imagick::ORIENTATION_BOTTOMRIGHT:
$img->rotateimage("#000", 180); // rotate 180 degrees
break;
case imagick::ORIENTATION_RIGHTTOP:
$img->rotateimage("#000", 90); // rotate 90 degrees CW
break;
case imagick::ORIENTATION_LEFTBOTTOM:
$img->rotateimage("#000", -90); // rotate 90 degrees CCW
break;
}
$img->setImageOrientation(imagick::ORIENTATION_TOPLEFT);
$img->writeImage($uploaded_img);
$img->clear();
$img->destroy();
Первый вариант был бы примерно так:
$img = new Imagick($uploaded_img);
$img->stripImage();
$img->writeImage($uploaded_img);
$img->clear();
$img->destroy();
Ну а дальше можно уже и пользователю позволить поворачивать фото и т.д. и т.п.
php.net/manual/ru/book.imagick.php