2017-06-16 10 views
0

PHPを使用してEXIFデータを画像から取得すると、Flashの値が整数になります。bitwiseを使用してEXIFフラッシュの読み込み可能な文字列を列挙します

たとえば、16を16進数に変換すると、0x10になります。これは、フラッシュがオフに切り替えられたこと、およびフラッシュ火災なかっ:

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 

が読める文字列を返すことができるように、ビット単位を使用してPHPでこれを列挙する方法があります。

例えば、0x19ある25の値は、おそらくこのような何かを見て(と動作しているようです)になります。

$fired = 0x01; 
$auto = 0x18; 

$flashValue = dechex(25); // 0x19 

$parts = []; 
if ($flashValue & $fired) 
{ 
    $parts[] = 'Fired'; 
} 
if ($flashValue & $auto) 
{ 
    $parts[] = 'Auto'; 
} 

$string = implode(', ', $parts); // "Fired, Auto" 

これは動作するようですが、例など、元の一例として、私が見えることはできません働く。

答えて

1
$flashValue = dechex(25); // 0x19 

dechex()を使用しないでください。文字列を返します。あなたが使用しようとしているビットごとの演算子は数値で動作します。 (25は完全に良い数字です - あなたが16進数で書かなかったという事実は重要ではありません)

"auto"は奇妙なフラグの組み合わせです: 0x08は「オフ」で、0x10は「オン」で、を両方とも(0x10 + 0x08 = 0x18)と組み合わせると「自動」になります。これらを注意深く扱う必要があります。

関連する問題