- 有些相機支援偵測使用者是水平或垂直拍攝這項功能,並將這項資料寫入相片的 EXIF 資訊中, Orientation 這項目裡。
 
在 EXIF 2.2 裡 Orientation 預先定義了八個可能的值,圖來自:ImpulseAdventure - JPEG / Exif Orientation and Rotation。- 利用 exif_read_data() 讀取 EXIF 中 Orientation 的資料。
 - 因為 GD 沒有鏡像翻轉的函數,所以我改用 Imagick 的函數(Imagick::flipImage() 、 Imagick::flopImage() 、Imagick::rotateImage())。
 - 我寫的版本在這裡下載: exif_auto_rotation.zip ,其中包括 1.JPG 到 8.JPG 八張圖(其實內容是同一張圖),利用 Quick EXIF editor 修改其 EXIF 的值,分別對應 Orientation 的 1 到 8 的值。
 - exif_auto_rotation.php: 
<?php // exif_auto_rotation.php?file=1.JPG if (!isset($_GET['file'])){ exit; } $file = $_GET['file']; $image = new Imagick(); if ( $image->readImage($file) !== false) { $exif = exif_read_data($file); switch ($exif['Orientation']) { case 1: // 水平(一般) break; case 2: // 水平鏡像 $image->flopImage(); break; case 3: // 翻轉180度 $image->rotateImage(new ImagickPixel(), 180); break; case 4: // 垂直鏡像 $image->flipImage(); break; case 5: // 水平鏡像後,順時鐘翻轉270度 $image->flopImage(); $image->rotateImage(new ImagickPixel(), 270); break; case 6: // 順時鐘翻轉270度 $image->rotateImage(new ImagickPixel(), 270); break; case 7: // 水平鏡像後,順時鐘翻轉90度 $image->flopImage(); $image->rotateImage(new ImagickPixel(), 90); break; case 8: // 順時鐘翻轉90度 $image->rotateImage(new ImagickPixel(), 90); break; default: // 讀取 EXIF Orientation 錯誤 exit; break; } header('Content-type: ' . image_type_to_mime_type(exif_imagetype($file))); echo $image; } else { // 圖檔讀取錯誤 } ?> 
歡迎來到小豬圈!
2008-09-14
依照片 EXIF 資訊 Orientation 自動旋轉
Subscribe to:
Post Comments (Atom)
Blog Archive
- 
        ▼ 
      
2008
(107)
- 
        ▼ 
      
September
(22)
- 申請一個泛英網域
 - Google Maps API 測試頁
 - 查詢 IP 來自哪個地區/城市 (三) 半自動更新資料庫
 - 查詢 IP 來自哪個地區/城市 (二) 世界各國國旗
 - 中國的戶口二元制
 - 查詢 IP 來自哪個地區/城市
 - TVBS新聞自律規範
 - 依照片 EXIF 資訊 Orientation 自動旋轉
 - 在 Windows 上安裝 ImageMagick for PHP (imagick)
 - 看了 Batman: The Dark Knight
 - 蛙鞋破洞了
 - Windows Live Writer 無體驗
 - 小烏龜的低潮
 - 吃我一發~~~~~
 - 天殺的 Windows XP SP3
 - 反著穿
 - 海大操場.路不轉人轉
 - Google Picasa 人臉辨識
 - Google Chrome 瀏覽器
 - 蛙鞋類型
 - 在中正紀念堂跑三千
 - 好像很擠的樣子
 
 
 - 
        ▼ 
      
September
(22)
 
個人常用鏈結
Labels
- .NET (1)
 - Accessibility (3)
 - ADSL (1)
 - Apache (9)
 - ASP.NET (1)
 - Babyer (1)
 - Browser (1)
 - Canon MX700 (1)
 - CAPTCHA (1)
 - CentOS (1)
 - CSS (7)
 - DB:SQL (1)
 - DB:SQLite (2)
 - DNS (3)
 - English (1)
 - EXIF (1)
 - filename.ext (1)
 - Firefox (4)
 - Firewall (1)
 - Flash (4)
 - Game 遊戲 (28)
 - Game:PC (6)
 - Game:PS3 (4)
 - Game:Xbox360 (3)
 - GNU (1)
 - Google (6)
 - Google:Android (8)
 - Google:Blogger (2)
 - Google:Chrome (1)
 - Google:Code (2)
 - GoogleAppEngine (2)
 - GoogleMaps (1)
 - GPG (1)
 - Hinet (1)
 - HTML (2)
 - HTTP (1)
 - i18n (1)
 - IE (3)
 - Java (2)
 - Javascript (2)
 - Linux (1)
 - Microsoft (2)
 - MIME (1)
 - MySQL (7)
 - NexusOne (2)
 - OAuth (1)
 - Open source 開放原始碼 (1)
 - OpenID (1)
 - OS (1)
 - OS:Windows (33)
 - PHP (49)
 - PHP:GTK (2)
 - PHP:PEAR (1)
 - PHP:PECL (3)
 - PHP:ZendFramework (4)
 - PostgreSQL (1)
 - PPPoE (1)
 - RegularExpressions (2)
 - Security (11)
 - Sphinx (2)
 - SQLite (1)
 - TCP (1)
 - Ubuntu (1)
 - UDP (1)
 - Usability (2)
 - Virtaul PC (1)
 - Wii (2)
 - XML (1)
 - Yahoo (2)
 - Yahoo:BBAuth (1)
 - Yahoo:YUI (1)
 - Youtube (1)
 - 不如賣雞排 (2)
 - 不願役 (33)
 - 中文處理 (1)
 - 圖 (5)
 - 媒體 (2)
 - 影片 (1)
 - 影音 (19)
 - 思 (8)
 - 攝 (9)
 - 政 (7)
 - 敗 (2)
 - 漫畫 (5)
 - 生活 (34)
 - 硬體設備 (13)
 - 網站開發 (16)
 - 網路 (8)
 - 英文 (3)
 - 貓 (2)
 - 資安 (1)
 - 趣 (29)
 - 軟體 (12)
 - 遊記 (8)
 - 運動 (2)
 - 關於我 (1)
 - 電影 (10)
 

很詳細,剛好在研究
ReplyDelete謝謝分享~~
ReplyDelete