ImageMagick和PHP正确旋转图像

时间:2017-02-09 18:59:27

标签: php imagemagick imagick

我正在尝试在我的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的云端来存储我们的文件,因此&#34; getImageBlob&#34;调用

问题是这似乎不起作用。结果图像仍然以与它们相同的方式定向,但现在没有元数据,因此标签不会修复&#34;他们。

我在这里做错了什么?我正在使用这个版本的Imagick PHP对象:

[versionNumber] =&gt; 1673 [versionString] =&gt; ImageMagick 6.8.9-9 Q16 x86_64 2015-01-05 http://www.imagemagick.org

回答你的回答:

感谢您的澄清。查看我遇到问题的特定图像之一,识别-verbose显示定义方向的多个位置:

Orientation: RightTop
exif:Orientation: 6
exif:thumbnail:Orientation: 6

这反映在我对PHP中的Imagick :: getImageOrientation的调用中,它返回&#34; 6&#34; value,然后使我的代码调用函数,如&#34; Imagick :: rotateImage(&#34;#000&#34;,180);&#34;。问题是这些调用图像没有改变。 8 - (

核心问题是:我们每天都会从全国各地的MLS获得这些图像。我们目前通过自动流程处理它们(当前调整大小)。当它们显示在我们的网站上时,目前一切正常,因为<img&gt;标签似乎很乐意解释EXIF数据并以正确的方向显示图像。但是......我们想要开始优化图像,这意味着要删除EXIF信息。所以我需要弄清楚为什么Imagick-&gt; rotateImage()不起作用。

2 个答案:

答案 0 :(得分:1)

好的,让我们写一个完整的答案:)

我对ImageMagick -auto-orient的链接的意思是指出,这种自动定位取决于EXIF配置文件和&#34;定位&#34;设置。如果它丢失或错误,自动定位将无法按预期工作。要检查您的图片是否具有带方向的EXIF配置文件,您可以使用以下几种方式:

PHP Imagick(在调用->stripImage()之前用图像检查)

echo 'Orientation is: ', $working_image->getImageOrientation();

PHP(如果您有本地文件)

$exif = exif_read_data('input.jpg');
echo 'Orientation is: ', isset($exif['Orientation']) ? $exif['Orientation'] : 'missing';

在线EXIF reader

您获得的值会被描述为here或更多关于图像自动旋转主题的示例,示例图像为here

或者您可以使用Gimp或Photoshop等程序。

所以你没有做错任何事情,如果没有EXIF,这将无法正常工作。它的相机正在将标签写入图像,所以无法保证所有照片都有。

也许为您网站的访问者提供图片轮播?现在有CSS3 transform: rotate(deg)属性,它非常简单,see ....

答案 1 :(得分:1)

我们可以获得当前的图像方向,并可以使用<tr style="display:none;"> <td class="ms-toolbar" nowrap="nowrap"> <table> <tr> <td width="99%" class="ms-toolbar" nowrap="nowrap"><IMG SRC="/_layouts/15/images/blank.gif" width="1" height="18"/></td> <td class="ms-toolbar" nowrap="nowrap"> <SharePoint:SaveButton runat="server" ControlMode="New" id="savebutton1"/> </td> <td class="ms-separator">&#160;</td> <td class="ms-toolbar" nowrap="nowrap" align="right"> <SharePoint:GoBackButton runat="server" ControlMode="New" id="gobackbutton1"/> </td> </tr> </table> </td>

轻松更新为原始图像方向。
Imagick