談 Jhead 的小 Bug (jhead 的修改記事)

linux相關問題與技術

談 Jhead 的小 Bug (jhead 的修改記事)

文章黑牌種子教師 » 週一 1月 09, 2006 3:38 pm

幾年來在使用 GALLERY 1.xx 版本並配合 http://www.sentex.net/~mwandel/jhead/ 顯示 EXIF 的資料,但每次在更新 JHEAD 時,都得修改 exif.c 裏的 bug.

如果數位相機的 ISO 是小於 ISO 50 時,JHEAD 是將 ISO 值乘上 200,在以前數位相機很少有 ISO 50 或低於 ISO 50 的,但後來 CONTAX N DIGITAL 是有 ISO 25,而 KODAK 的 14N 與 DCS/N 及 DCS/C 有 ISO 6,而這幾台數位相機讓 JHEAD 變成有 BUG 了.

也不知道為何要在 ISO 小於 50 時,得將 ISO 值乘上 200, exif.c 是註解修正舊有的數位相機.

exif.c 原始的這段程式碼 :

case TAG_ISO_EQUIVALENT:
ImageInfo.ISOequivalent = (int)ConvertAnyFormat(ValuePtr, Format);
if ( ImageInfo.ISOequivalent < 50 ){
// Fixes strange encoding on some older digicams.
ImageInfo.ISOequivalent *= 200;
}
break;

而我修改後的這段程式碼 :

case TAG_ISO_EQUIVALENT:
ImageInfo.ISOequivalent = (int)ConvertAnyFormat(ValuePtr, Format);
if ((strstr(ImageInfo.CameraModel,"N DIGITAL") == 0)
{
if ( ImageInfo.ISOequivalent < 50 ) ImageInfo.ISOequivalent *= 200;
}
if ((strstr(ImageInfo.CameraModel,"CONTAX N DIGITAL") != 0)
{
if ( ImageInfo.ISOequivalent < 5 ) ImageInfo.ISOequivalent *= 200;
}
break;

這裏只修正 Contax N Digital 原本我也修正已知會產生 bug 的 Kodak,但後來才發現似乎我將 C 當 PHP 的程式碼改,而改的不是很理想, C 對我來說是很生疏的語言.....

2006/01/08

上網找了 KODAK 的 14N 與 SLR/N 的照片,上傳到 GALLERY 上查詢 EXIF 的字串,然後重新更改 EXIF.C 讓它也能一起修正 KODAK,改好後也測試通過.

但後來連結到另外圖片時才發現又失敗了,原因在有些照片的 EXIF 資料並非是一致的,有些字串是有大小寫的,而且還只是 CONTAX N DIGITAL 的照片,那 KODAK 會如何還不知道? 原也想用製造商來分辨,後來又發現連製造商也是有多種字串,最後乾脆只將最原始的

if ( ImageInfo.ISOequivalent < 50 ) ImageInfo.ISOequivalent *= 200;

這個 50 改為 5,這樣只影響到未知的舊型相機.

以下是 CONTAX N DIGITAL 的兩種 EXIF 資料,可能是 RAW 檔轉換時的軟體不同而產生的不同結果.

Camera make : KYOCERA
Camera model : CONTAX N DIGITAL

Camera make : Contax
Camera model : N Digital

2006/01/09

今天以 php4 裏的 read_exif_data 函式試,這函式的 iso 是正確的. 但這 php4 裏的 exif.c 寫法與 jhead 有很大的差異,無法由 php4 的 exif.c 這裏移植這 iso 的判斷過去, php4 的寫法很細膩,對很多特別情形的數據做很多特別處理......


<?

$exif = read_exif_data ('kicx0066.jpg');

while(list($k,$v)=each($exif)) {

echo "$k: $v<br>\n";

}

?>

http://www.clwu.idv.tw/~clwu/phpexif.php 以上 php exif 試驗

如果你使用 GALLERY 1.xx 版本, 也以 jhead 來顯示 exif 資料,可以下載 http://www.clwu.idv.tw/~clwu/kicx0066.jpg 再上傳到 gallery 查看 exif 資料,這張照片的 iso 為 25 才是正確的,如果顯示為 5000 是錯誤的.
黑牌種子教師
 

文章falcon_vader » 週二 1月 10, 2006 10:45 am

感謝您的分享~~ :D
我是李老師,電腦小白痴
falcon_vader
 
文章: 118
註冊時間: 週四 7月 28, 2005 8:57 pm
來自: 團團圓圓坐在我對面


回到 linux技術討論

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 0 位訪客

cron