【发布时间】:2017-02-09 18:59:26
【问题描述】:
我正在尝试在我的 php 代码中使用 Imagick 来正确定位图像,这样我就可以从它们中剥离元数据并让它们正确显示。我尝试了这篇文章中的方法:
Detect EXIF Orientation and Rotate Image using ImageMagick
但它不起作用。使用该帖子中的自动旋转功能,这就是我正在做的事情:
$working_image = new \Imagick();
$working_image->readImageBlob( $source_data);
$working_image->setImageFormat('jpeg');
autorotate($working_image);
... some resizing code:
$working_image->resizeImage( $width, $height, \Imagick::FILTER_CATROM, .7);
// get rid of metadata
$working_image->stripImage();
$working_image->writeImage( <unique filename> );
$working_image->getImageBlob();
... write out to data file to google
我们使用 Google 的云服务来存储我们的文件,因此调用了“getImageBlob”。
问题是这似乎不起作用。生成的图像仍然以相同的方式定向,但现在没有元数据,因此标签不会“修复”它们。
我在这里做错了什么?我正在使用这个版本的 Imagick PHP 对象:
[版本号] => 1673 [versionString] => ImageMagick 6.8.9-9 Q16 x86_64 2015-01-05 http://www.imagemagick.org
回应您的回答:
感谢您的澄清。查看我遇到问题的特定图像之一, identify -verbose 显示定义方向的多个位置:
Orientation: RightTop
exif:Orientation: 6
exif:thumbnail:Orientation: 6
这反映在我在 PHP 中对 Imagick::getImageOrientation 的调用中,它返回“6”值,然后导致我的代码调用诸如“Imagick::rotateImage("#000", 180);"之类的函数.问题是这些调用不会改变图像。 8-(
核心问题是:我们每天从全国各地的 MLS 获得成千上万的这些图像。我们目前通过自动流程处理它们(当前调整大小)。当它们显示在我们的网站上时,目前一切正常,因为<img> 标签似乎很乐意解释 EXIF 数据并以正确的方向显示图像。但是...我们想开始优化图像,这意味着去除 EXIF 信息。所以我需要弄清楚为什么 Imagick->rotateImage() 不起作用。
【问题讨论】:
-
见-auto-orient - 是什么告诉你图片中的EXIF配置文件?
-
嗯,有自动定向.. 但是我如何从 PHP 和 Imagick 对象中调用它呢?这是一个批处理功能,目前每天处理(调整大小)数万张图像。我正在尝试扩展此处理以修复图像方向。至于 EXIF 是如何进入图像的——我猜是从正在使用的任何相机——在我现在使用的测试图像的情况下,三星 SM-G900V。但我无法控制 - 这些图像是从全国的房地产经纪人那里收到的,可能涉及数千个摄像头。
-
不确定是不是拼写错误,但是对于方向 6(RightTop),预期的旋转调用应该是
$image->rotateImage("#000", 90);而不是 180。如果是拼写错误,使用 cmdlineconvert input.jpg -rotate 90 out.jpg是否有效?
标签: php imagemagick imagick