2016-01-25 93 views
0

我遇到了imagecreatefromjpeg和圖像旋轉的問題。imagecreatefromjpeg不旋轉圖像

更具體地:

圖像#1 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160124112643911541_orig.jpg由imagecreatefromjpeg正常旋轉(EXIF標籤被兌現),但無法在Picasa或Win10照片查看器。

當我說「通過imagecreatefromjpeg正確旋轉」時,我的代碼中沒有旋轉,我的意思是,文學。只是在做

$img = imagecreatefromjpeg($filename); 

圖像從文件加載並正確旋轉。我使用GD版本2.1.1-dev運行PHP 5.5.31-2 + deb.sury.org〜trusty + 1。

圖片#2 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160125070736520868_orig.jpg沒有正確地通過imagecreatefromjpeg(exif標記未被兌現)正確旋轉,但在Picasa和Win10照片查看器中正確旋轉。

此外,使用傑出的Jeffrey's Exif Viewer http://regex.info/exif.cgi的結果與我從imagecreatefromjpeg看到的一致。

+0

你能顯示一些輪換代碼嗎? –

+0

我應該在我的問題中更加清楚,沒有輪換代碼。我會更新。 – Vnuk

+0

那麼,你怎麼知道它是否旋轉? 'getimagesize'爲兩個圖像返回正確的值。 –

回答

0

有點不直觀,它實際上是正確顯示的圖像#2和已損壞的圖像#1。

兩幅圖像的EXIF方向值均爲6,表示圖像逆時針旋轉90度。 (關於EXIF方向,請參閱this excellent post瞭解更多詳細信息。)

imagecreatefromjpeg不以任何方式轉換圖像。它正在加載圖像'原始'。它只是看起來像旋轉,因爲您的默認查看器(Windows縮略圖/ Windows照片查看器?)自動根據EXIF值執行此操作。 Jeffrey的Exif Viewer也顯示了原始圖像,這就是爲什麼你的結果是一致的。

根據該值,正確地顯示兩個圖像應該執行90度順時針旋轉變換:

$img = imagerotate($img, -90, 0); 

這給出以下結果(圖像縮小此處):

圖像#1 :

enter image description here

影像#2:

enter image description here

這正是我在Win8照片查看器中看到的兩個圖像。因此,由於圖像#1的方向值錯誤,因此無法通過代碼正確旋轉。

+0

而這對圖像#1來說顯然是錯誤的。你到底想說什麼? – Vnuk

+0

您的圖像有錯誤的方向值。根據它的方向值無法正確顯示。 – timclutton

+0

第一張圖片被愚蠢的編輯器所束縛。謝謝你打開我的眼睛。 – Vnuk