我尝试在我的php代码中使用Imagick来正确地定位图像,这样我就可以从它们中剥离元数据,并让它们正确地显示出来。
Detect EXIF Orientation and Rotate Image using ImageMagick
但是它不起作用。在那篇文章中使用autorotate函数,这就是我正在做的:
$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 [版本字符串] =〉ImageMagick 6.8.9-9第16季度x86_64 2015年1月5日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()不起作用。
3条答案
按热度按时间bfhwhh0e1#
好的,让我们写一个完整的答案:)
我在ImageMagick的-auto-orient链接中的意思是指出,这种自动定向取决于EXIF配置文件和“方向”设置。如果它丢失或错误,自动定向将无法正常工作。要检查您的图像是否具有EXIF配置文件和“方向”,您可以使用以下几种方法:
PHP Imagick(在调用
->stripImage()
之前用image检查它)PHP(如果有本地文件)
在线EXIF reader。
您获得的值描述为例如here或更多关于图像自动旋转的主题,示例图像为here
或者你也可以使用像Gimp或Photoshop这样的程序。
所以你没有做错什么,没有EXIF这个功能是行不通的。是相机把标签写入图像,所以不能保证你所有的照片都有标签。
也许在你的网站上为访问者提供图像旋转代替?现在有CSS3
transform: rotate(deg)
属性,使它真的很容易,see...rslzwgfq2#
我们可以获得当前图像方向,并可以轻松地使用
Imagick
更新到原始图像方向zysjyyx43#
@Satendra Rawat给出了一个很好但不完整的答案。在GitHub库https://github.com/ianare/exif-samples中,你可以看到8个方向示例。只有3、5和8个正确。
以下是所有方向的更新: