PHP Stapler和Imagine Image autororate问题

时间:2016-08-04 15:53:07

标签: php image exif php-imagine

我与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度。

这是原始图片的屏幕截图,你可以看到它是正直的:

enter image description here

以下是zoom样式处理后的图片截图。它旋转了90度:

enter image description here

正如您所看到的,autorotatethumbnail样式的standard设置为true,但这些图像未旋转90度并在处理后正确显示。< / p>

奇怪的是,当我检查原始图像的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样式进行旋转?

1 个答案:

答案 0 :(得分:0)

看起来我需要return $image->strip()才能在自动旋转图片后删除exif数据。