不過瀏覽器是一個例外,由同事測試得到的資訊,在 iPad 上的 Safari 會自動偵測圖片方向,並作轉正的動作。而其它 PC / Mac / Android 的瀏覽器都還是用圖片原來內容呈現。
這造成一個問題,當使用者利用手持裝置拍照並直接上傳,在瀏覽器所看到的圖片方向是不能被預期的。因此才會有使用 GraphicsMagick 來替所有上傳圖片作轉正的需求。
轉正工作分成兩個部分,首先是判讀圖片方向,再來才是旋轉圖片。由於網路上找到的教學都只教旋轉圖片,卻沒提到怎麼判斷圖片方向。花了一些時間使用命令列呼叫 GraphicsMagick 的「gm」指令完成這些測試,先將測試結果分享在這裡。
判讀方向上,資訊被放在 EXIF:Orientation 裡,若要單獨顯示某張圖片的方向,可以用下面的指令。
gm identify -format "%[EXIF:Orientation]" [圖片檔名]
如果回傳值是 1,表示圖片不需要旋轉。而其它數字代表的意思,可以查前面提到的網站。使用 -format 將回傳值限定只有方向資訊,原因在於作為之後和程式串接時的準備,以我的例子是為了和 Java 串接,單純的回傳值在解析字串的時候比較容易。
不過 1 以外的方向數值代表意義其實不太重要,因為 GraphicsMacigk 的 convert 指令有個方便的參數「-auto-orient」,可以把圖片自動轉正。前面的命令實際上的目的只有判斷要不要作旋轉,用來節省一些不必要的轉換時間。所以只有帶一行…
gm convert -auto-orient [圖片檔名] [輸出圖片檔名]就可以把圖片轉正。
轉正後的圖片,在電腦上預覽的時候,方向反而不正確了。這是因為 GraphicsMacik 只有旋轉內容,並沒有去改變圖片的方向資訊。因此還需要修改圖片的方向資訊才行,否則本來在 iPad Safari 裡正常顯示的圖片反而方向錯亂。不幸的是,花了我許多時間仍然沒有找到可以修改方向屬性的指令,只看到一個清空資訊的參數「strip」。經過測試,瀏覽器會把它視為不需要旋轉的圖片,就像早期照機所拍出,沒有帶方向資訊的圖。
因此最後的指令為…
gm convert -auto-orient -strip [圖片檔名] [輸出圖片檔名]
我認為應該還有其它更好的解法,不過暫時沒時沒再深入研究下去了,先將就用用。
沒有留言:
張貼留言