PHP Stapler 和 Imagine Image 自动排序问题
PHP Stapler and Imagine Image autororate issue
我发现 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 度:
如您所见,我还将 thumbnail
和 standard
样式的 autorotate
设置为 true,但这些图像未旋转 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 数据。
我发现 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 度:
如您所见,我还将 thumbnail
和 standard
样式的 autorotate
设置为 true,但这些图像未旋转 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 数据。