2017-02-09 77 views
1

我想在我的php代碼中使用Imagick來正確定位圖像,以便我可以從它們中去除元數據並讓它們正確顯示。我想在這個帖子的方法:ImageMagick和PHP正確地旋轉圖像

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 

我們正在使用谷歌的雲計算的東西存儲文件,因此「getImageBlob」電話。

問題是這似乎不起作用。由此產生的圖像仍然面向他們的方式,但現在沒有元數據,所以標籤不會「修復」它們。

我在這裏做錯了什麼?我使用這個版本的PHP Imagick對象:

[VERSIONNUMBER] => 1673 [VERSIONSTRING] => ImageMagick的6.8.9-9 Q16 x86_64的2015年1月5日http://www.imagemagick.org

在回答你的答案:

感謝您的澄清。望着那我有問題的特定圖像之一,確定-verbose顯示多個地方定義方向:

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

,這是反映在我的調用Imagick :: getImageOrientation在PHP中,它返回「6 「值,然後導致我的代碼調用像」Imagick :: rotateImage(「#000」,180);「。問題是這些調用的圖像不變。 8 - (

核心問題是這樣的:我們每天從全國各地的MLS上獲取這些圖像,我們目前正在通過自動過程來處理它們(當前調整大小),當它們顯示在我們的網站上時,一切都很好,因爲<img>標籤似乎很樂意解釋EXIF數據,並以正確的方向顯示圖像。但是...我們想要開始優化圖像,這意味着剝離EXIF信息,所以我需要弄清楚爲什麼Imagick-> rotateImage()不工作。

+0

請參閱[-auto-orient](http://www.imagemagick.org/script/command-line-options.php#auto-東方) - 什麼告訴您的圖像EXIF配置文件? – lp1051

+0

那麼,有自動定位..但我怎麼能從PHP和Imagick對象內部調用?這是一個批處理功能,目前每天處理(調整大小)數以萬計的圖像。我正在嘗試擴展此處理以修復圖像方向。至於EXIF如何進入圖像 - 我猜從任何相機正在使用 - 在我現在正在使用的測試圖像的情況下,三星SM-G900V。但我無法控制 - 這些圖像是從全國的房地產經紀人那裏收到的,涉及數以千計的可能的相機。 –

+0

不確定它是否是拼寫錯誤,但是對於方向6(RightTop),預期的旋轉調用應該是'$ image-> rotateImage(「#000」,90);'不是180.如果是拼寫錯誤, cmdline'convert input.jpg -rotate 90 out.jpg'? – lp1051

回答

0

好吧,讓我們寫一個整體的答案:)

我的鏈接ImageMagick的是什麼意思210指出,這種自動定向取決於EXIF配置文件和「方向」設置。如果缺少或錯誤,自動定位將無法按預期工作。要檢查是否您的圖像與機智方向的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

或者你可以使用像瘸子或Photoshop程序。

所以,你沒有做錯任何事,沒有EXIF,這是行不通的。它是將標籤寫入圖像的相機,所以不能保證所有的照片都有。

也許爲您的網站上的訪問者提供圖片輪播?現在有CSS3 transform: rotate(deg)屬性,使它很容易,see ....

+0

附加信息:昨天,我們的流程處理了240萬張圖片。幸運的是,他們中的大多數都是正確的。 8-) –