Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

修正 Gallery2 無法正確讀取 Nikon D50 產生的 jpg 檔的 ISO 資訊
post by tommy @ 06 五月, 2007 13:54

這是一個老舊的問題, 在我幾年前剛買 Nikon D50 時, 就發現這個問題的存在. 不過當時, 我的解決方法是在這篇討論中所提到的 IsoFix 這個軟體, 修正所產生的 jpg 檔案, 就可以正確的顯示出 ISO 的值. 不過... 因為這是多出來的一個步驟, 所以... 最近老是忘了要去執行 isofix, 就直接把檔案丟到 Gallery 上頭了. 所以在網頁上頭看到的 ISO 值就不對了.

原本打算就把檔案抓下來, 用 isofix 修正後再放上. 不過... 想想, 日後這類的情形可能也會一直出現, 這個解決方案實在是不太方便. 所以就決定自己修改 Gallery 的程式碼. 一開始, 是使用 exiftool 這個工具來找出正確的 ISO, 不過, 後來覺得這個方法還要去執行一個外部的指令, 有點不太安全, 也不太方便. 所以就找了一下有關 Nikon ISO 儲存的方式, 後來找到了這個網頁, 上頭提到了 Nikon 把 ISO 的資訊放在 MakerNote 的 tag 2 的位置. 而這個值有兩個部份, 一個是 0, 另一個就是 ISO 了.

我看了一下 Gallery 的 EXIF 模組, 發現在 modules/exif/lib/exifer/makers/nikon.inc 這個檔案內, 也是有處理有關 Nikon 的 MakerNote 部份. 不過並沒有對 tag 2 這個部份做特別的處理 (其實是有, 不過是針對舊的某些 Exxx 型號). 發現這個地方, 直接把 tag 2 的內容取出來當 ISO 使用. 檢查了一下, 果然只要除以 0x10000 之後, 就可以得到正確的 ISO 值了.

--- modules/exif/lib/exifer/makers/nikon.inc.orig 2007-05-06 13:48:09.576613550 +0800
+++ modules/exif/lib/exifer/makers/nikon.inc 2007-05-06 13:51:44.001246080 +0800
@@ -309,6 +309,9 @@
$data = substr($block,hexdec($value)+hexdec($offset)+2,$bytesofdata);
}
$formated_data = formatNikonData($type,$tag,$intel,$model,$data);
+ if ($tag=="0002" && $formated_data >= 0x10000)
+ $formated_data = floor($formated_data/0x10000);
+

if($result['VerboseOutput']==1) {
$result['SubIFD']['MakerNote'][$tag_name] = $formated_data;

這個 patch 可以由這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/gallery_nikon_exif.patch

另外, 也把這個修正提交給 Gallery. 不過... 依據過去給 Gallery 的 patch 的經驗, 似乎都不太容易被接受. 有需要的人就自己改一改吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:修正 Gallery2 無法正確讀取 Nikon D50 產生的 jpg 檔的 ISO 資訊 [ 回覆 ]

昨天第一次架了gallery2 for windows,架好了iso沒出來,正傷腦筋說! 我改好了modules/exif/lib/exifer/makers/nikon.inc重新了install步驟(11步),可是我的iso還是沒出來,C4040有ISO但NIKON D70沒有,又再新增一張照片,ISO還是沒,不知是那有問題?

commons icon [2] Re:修正 Gallery2 無法正確讀取 Nikon D50 產生的 jpg 檔的 ISO 資訊 [ 回覆 ]

弄好了,ISO可以出來了!自己的問題!

迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 57 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS