2011-08-16 24 views
2

我一直在用我的PHP腳本閱讀一些EXIF數據。我想確定某個圖像是否使用了閃光燈。以下是EXIF閱讀器返回的值閱讀EXIF並確定閃存是否已經觸發

0x0  = No Flash 
0x1  = Fired 
0x5  = Fired, Return not detected 
0x7  = Fired, Return detected 
0x8  = On, Did not fire 
0x9  = On, Fired 
0xd  = On, Return not detected 
0xf  = On, Return detected 
0x10 = Off, Did not fire 
0x14 = Off, Did not fire, Return not detected 
0x18 = Auto, Did not fire 
0x19 = Auto, Fired 
0x1d = Auto, Fired, Return not detected 
0x1f = Auto, Fired, Return detected 
0x20 = No flash function 
0x30 = Off, No flash function 
0x41 = Fired, Red-eye reduction 
0x45 = Fired, Red-eye reduction, Return not detected 
0x47 = Fired, Red-eye reduction, Return detected 
0x49 = On, Red-eye reduction 
0x4d = On, Red-eye reduction, Return not detected 
0x4f = On, Red-eye reduction, Return detected 
0x50 = Off, Red-eye reduction 
0x58 = Auto, Did not fire, Red-eye reduction 
0x59 = Auto, Fired, Red-eye reduction 
0x5d = Auto, Fired, Red-eye reduction, Return not detected 
0x5f = Auto, Fired, Red-eye reduction, Return detected 

其中哪一個表示閃存已被使用?

最好的問候, Mladjo

回答

9

我相信,如果你的十六進制值轉換爲二進制數,最右邊的數字則指示Flash是否實際發射與否。

因此:

+-------------------------------------------------------+------+----------+-------+ 
|      Status       | Hex | Binary | Fired | 
+-------------------------------------------------------+------+----------+-------+ 
| No Flash            | 0x0 | 00000000 | No | 
| Fired             | 0x1 | 00000001 | Yes | 
| "Fired, Return not detected"       | 0x5 | 00000101 | Yes | 
| "Fired, Return detected"        | 0x7 | 00000111 | Yes | 
| "On, Did not fire"         | 0x8 | 00001000 | No | 
| "On, Fired"           | 0x9 | 00001001 | Yes | 
| "On, Return not detected"        | 0xd | 00001011 | Yes | 
| "On, Return detected"         | 0xf | 00001111 | Yes | 
| "Off, Did not fire"         | 0x10 | 00010000 | No | 
| "Off, Did not fire, Return not detected"    | 0x14 | 00010100 | No | 
| "Auto, Did not fire"         | 0x18 | 00011000 | No | 
| "Auto, Fired"           | 0x19 | 00011001 | Yes | 
| "Auto, Fired, Return not detected"     | 0x1d | 00011101 | Yes | 
| "Auto, Fired, Return detected"      | 0x1f | 00011111 | Yes | 
| No flash function         | 0x20 | 00100000 | No | 
| "Off, No flash function"        | 0x30 | 00110000 | No | 
| "Fired, Red-eye reduction"       | 0x41 | 01000001 | Yes | 
| "Fired, Red-eye reduction, Return not detected"  | 0x45 | 01000101 | Yes | 
| "Fired, Red-eye reduction, Return detected"   | 0x47 | 01000111 | Yes | 
| "On, Red-eye reduction"        | 0x49 | 01001001 | Yes | 
| "On, Red-eye reduction, Return not detected"   | 0x4d | 01001101 | Yes | 
| "On, Red-eye reduction, Return detected"    | 0x4f | 01001111 | Yes | 
| "Off, Red-eye reduction"        | 0x50 | 01010000 | No | 
| "Auto, Did not fire, Red-eye reduction"    | 0x58 | 01011000 | No | 
| "Auto, Fired, Red-eye reduction"      | 0x59 | 01011001 | Yes | 
| "Auto, Fired, Red-eye reduction, Return not detected" | 0x5d | 01011101 | Yes | 
| "Auto, Fired, Red-eye reduction, Return detected"  | 0x5f | 01011111 | Yes | 
+-------------------------------------------------------+------+----------+-------+ 
16

閃光屬性實際上是下列標誌的組合:

0: FlashDidNotFire 
1: FlashFired 
2: StrobeReturnLightDetected 
4: StrobeReturnLightNotDetected 
8: CompulsoryFlashMode 
16: AutoMode 
32: NoFlashFunction 
64: RedEyeReductionMode 

要檢查是否使用了閃光燈,位與,1閃光燈屬性:

$flashfired = ($exifflashproperty & 1) != 0; 
+0

完美答案! –