Я получаю некоторое несоответствие с функцией автоматического поворота Stapler, и надеялся, что кто-нибудь сможет объяснить, что происходит.
Мои стили определены на модели Eloquent следующим образом:
'styles' => [
'thumbnail' => [
'dimensions' => '300',
'auto_orient' => true,
'convert_options' => ['quality' => 100],
],
'standard' => [
'dimensions' => 'x275',
'auto_orient' => true,
'convert_options' => ['quality' => 100],
],
'zoom' => function($file, $imagine) {
$image = $imagine
->setMetadataReader(new \Imagine\Image\Metadata\ExifMetadataReader)
->open($file->getRealPath());
// Auto rotate the image
$filter = new \Imagine\Filter\Basic\Autorotate;
$filter->apply($image);
// Get the current size
$size = $image->getSize();
// Scale down to zoom size only if
// image is wide enough.
if ($size->getWidth() > 1280) {
$newSize = $size->widen(1280);
$image->resize($newSize);
}
return $image;
}
]
Проблема в том, что для конкретного изображения zoom
стиль не работает правильно. Поворот изображения на 90 градусов, хотя оригинал уже в вертикальном положении.
Вот скриншот исходного изображения, вы можете видеть, что оно в вертикальном положении:
Вот снимок экрана изображения после обработки zoom
стиль. Он повернут на 90 градусов:
Как видите, у меня тоже есть autorotate
установить в true для thumbnail
а также standard
стилей, но эти изображения не поворачиваются на 90 градусов и отображаются правильно после обработки.
Странно то, что когда я проверяю данные ориентации exif для исходного изображения, оно имеет значение 6, что означает, что изображение должно быть повернуто на 90 градусов. Если это так, то почему другие стили также не поворачиваются?
$imagine = new Imagine\Imagick\Imagine;
$image = $imagine->open('https://s3.amazonaws.com/path/to/original/image.jpg');
echo $image->metadata()->toArray()['ifd0.Orientation'];
// Output is 6
Поэтому мне интересно, почему exif-ориентация равна 6, если это изображение уже в вертикальном положении. Кроме того, почему изображение поворачивается только для zoom
стиль?
Похоже, мне нужно return $image->strip()
для того, чтобы удалить данные EXIF после автоматического поворота изображения.
Других решений пока нет …