- 有些相機支援偵測使用者是水平或垂直拍攝這項功能,並將這項資料寫入相片的 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