/** * * @param $type * @param $tag * @param $intel * @param $data * @return unknown_type */ protected function _formatData($type, $tag, $intel, $data) { switch ($type) { case 'ASCII': case 'UNDEFINED': break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom) { $data = $top / $bottom; } elseif (!$top) { $data = 0; } else { $data = $top . '/' . $bottom; } switch ($tag) { case '0204': //DigitalZoom $data .= 'x'; break; case '0205': //Unknown2 $data = $top . '/' . $bottom; break; } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); switch ($tag) { case '0201': //JPEGQuality switch ($data) { case 1: $data = 'SQ'; break; case 2: $data = 'HQ'; break; case 3: $data = 'SHQ'; break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0202': //Macro switch ($data) { case 0: $data = 'Normal'; break; case 1: $data = 'Macro'; break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; } break; default: $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } break; } return $data; }
/** * * @param $type * @param $tag * @param $intel * @param $model * @param $data * @return unknown_type */ protected function _formatData($type, $tag, $intel, $model, $data) { switch ($type) { case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom != 0) { $data = $top / $bottom; } elseif ($top == 0) { $data = 0; } else { $data = $top . '/' . $bottom; } if ($tag == '0085' && $model == 1) { //ManualFocusDistance $data = $data . ' m'; } if ($tag == '0086' && $model == 1) { //DigitalZoom $data = $data . 'x'; } if ($tag == '000a' && $model == 0) { //DigitalZoom $data = $data . 'x'; } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); if ($model != 0) { break; } switch ($tag) { case '0003': //Quality switch ($data) { case 1: $data = Horde_Image_Translation::t("VGA Basic"); break; case 2: $data = Horde_Image_Translation::t("VGA Normal"); break; case 3: $data = Horde_Image_Translation::t("VGA Fine"); break; case 4: $data = Horde_Image_Translation::t("SXGA Basic"); break; case 5: $data = Horde_Image_Translation::t("SXGA Normal"); break; case 6: $data = Horde_Image_Translation::t("SXGA Fine"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0004': //Color switch ($data) { case 1: $data = Horde_Image_Translation::t("Color"); break; case 2: $data = Horde_Image_Translation::t("Monochrome"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0005': //Image Adjustment switch ($data) { case 0: $data = Horde_Image_Translation::t("Normal"); break; case 1: $data = Horde_Image_Translation::t("Bright+"); break; case 2: $data = Horde_Image_Translation::t("Bright-"); break; case 3: $data = Horde_Image_Translation::t("Contrast+"); break; case 4: $data = Horde_Image_Translation::t("Contrast-"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0006': //CCD Sensitivity switch ($data) { case 0: $data = 'ISO-80'; break; case 2: $data = 'ISO-160'; break; case 4: $data = 'ISO-320'; break; case 5: $data = 'ISO-100'; break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0007': //White Balance switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto"); break; case 1: $data = Horde_Image_Translation::t("Preset"); break; case 2: $data = Horde_Image_Translation::t("Daylight"); break; case 3: $data = Horde_Image_Translation::t("Incandescense"); break; case 4: $data = Horde_Image_Translation::t("Flourescence"); break; case 5: $data = Horde_Image_Translation::t("Cloudy"); break; case 6: $data = Horde_Image_Translation::t("SpeedLight"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '000b': //Converter switch ($data) { case 0: $data = Horde_Image_Translation::t("None"); break; case 1: $data = Horde_Image_Translation::t("Fisheye"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; } case 'UNDEFINED': if ($model != 1) { break; } switch ($tag) { case '0001': $data = $data / 100; break; case '0088': //AF Focus Position $temp = Horde_Image_Translation::t("Center"); $data = bin2hex($data); $data = str_replace('01', 'Top', $data); $data = str_replace('02', 'Bottom', $data); $data = str_replace('03', 'Left', $data); $data = str_replace('04', 'Right', $data); $data = str_replace('00', '', $data); if (!strlen($data)) { $data = $temp; } break; } break; default: $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } if ($model != 1) { break; } switch ($tag) { case '0083': //Lens Type $data = hexdec(substr($data, 0, 2)); switch ($data) { case 0: $data = Horde_Image_Translation::t("AF non D"); break; case 1: $data = Horde_Image_Translation::t("Manual"); break; case 2: $data = 'AF-D or AF-S'; break; case 6: $data = 'AF-D G'; break; case 10: $data = 'AF-D VR'; break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '0087': //Flash type $data = hexdec(substr($data, 0, 2)); switch ($data) { case 0: $data = Horde_Image_Translation::t("Did Not Fire"); break; case 4: $data = Horde_Image_Translation::t("Unknown"); break; case 7: $data = Horde_Image_Translation::t("External"); break; case 9: $data = Horde_Image_Translation::t("On Camera"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; } break; } return $data; }
/** * Formats Data for the data type */ protected function _formatData($type, $tag, $intel, $data) { switch ($type) { case 'UBYTE': case 'SBYTE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); if ($tag == '000f') { //AFMode switch ($data) { case 256: $data = Horde_Image_Translation::t("9-area-focusing"); break; case 16: $data = Horde_Image_Translation::t("1-area-focusing"); break; case 4096: $data = Horde_Image_Translation::t("3-area-focusing (High speed)"); break; case 4112: $data = Horde_Image_Translation::t("1-area-focusing (High speed)"); break; case 1: $data = Horde_Image_Translation::t("Spot-focusing"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } } break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom != 0) { $data = $top / $bottom; } elseif ($top == 0) { $data = 0; } else { $data = $top . '/' . $bottom; } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); switch ($tag) { case '0001': //Image Quality switch ($data) { case 2: $data = Horde_Image_Translation::t("High"); break; case 3: $data = Horde_Image_Translation::t("Standard"); break; case 6: $data = Horde_Image_Translation::t("Very High"); break; case 7: $data = Horde_Image_Translation::t("RAW"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '0003': //White Balance switch ($data) { case 1: $data = Horde_Image_Translation::t("Auto"); break; case 2: $data = Horde_Image_Translation::t("Daylight"); break; case 3: $data = Horde_Image_Translation::t("Cloudy"); break; case 4: $data = Horde_Image_Translation::t("Halogen"); break; case 5: $data = Horde_Image_Translation::t("Manual"); break; case 8: $data = Horde_Image_Translation::t("Flash"); break; case 10: $data = Horde_Image_Translation::t("Black and White"); break; case 11: $data = Horde_Image_Translation::t("Manual"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown(%s)"), $data); break; } break; case '0007': //Focus Mode switch ($data) { case 1: $data = Horde_Image_Translation::t("Auto"); break; case 2: $data = Horde_Image_Translation::t("Manual"); break; case 4: $data = Horde_Image_Translation::t("Auto, Focus button"); break; case 5: $data = Horde_Image_Translation::t("Auto, Continuous"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown(%s)"), $data); break; } break; case '001a': //Image Stabilizer switch ($data) { case 2: $data = Horde_Image_Translation::t("Mode 1"); break; case 3: $data = Horde_Image_Translation::t("Off"); break; case 4: $data = Horde_Image_Translation::t("Mode 2"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown(%s)"), $data); break; } break; case '001c': //Macro mode switch ($data) { case 1: $data = Horde_Image_Translation::t("On"); break; case 2: $data = Horde_Image_Translation::t("Off"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown(%s)"), $data); break; } break; case '001f': //Shooting Mode switch ($data) { case 1: $data = Horde_Image_Translation::t("Normal"); break; case 2: $data = Horde_Image_Translation::t("Portrait"); break; case 3: $data = Horde_Image_Translation::t("Scenery"); break; case 4: $data = Horde_Image_Translation::t("Sports"); break; case 5: $data = Horde_Image_Translation::t("Night Portrait"); break; case 6: $data = Horde_Image_Translation::t("Program"); break; case 7: $data = Horde_Image_Translation::t("Aperture Priority"); break; case 8: $data = Horde_Image_Translation::t("Shutter Priority"); break; case 9: $data = Horde_Image_Translation::t("Macro"); break; case 11: $data = Horde_Image_Translation::t("Manual"); break; case 13: $data = Horde_Image_Translation::t("Panning"); break; case 14: $data = Horde_Image_Translation::t("Simple"); break; case 18: $data = Horde_Image_Translation::t("Fireworks"); break; case 19: $data = Horde_Image_Translation::t("Party"); break; case 20: $data = Horde_Image_Translation::t("Snow"); break; case 21: $data = Horde_Image_Translation::t("Night Scenery"); break; case 22: $data = Horde_Image_Translation::t("Food"); break; case 23: $data = Horde_Image_Translation::t("Baby"); break; case 27: $data = Horde_Image_Translation::t("High Sensitivity"); break; case 29: $data = Horde_Image_Translation::t("Underwater"); break; case 33: $data = Horde_Image_Translation::t("Pet"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown(%s)"), $data); break; } break; case '0020': //Audio switch ($data) { case 1: $data = Horde_Image_Translation::t("Yes"); break; case 2: $data = Horde_Image_Translation::t("No"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '0023': //White Balance Bias $data = $data . ' EV'; break; case '0024': //Flash Bias $data = $data; break; case '0028': //Colour Effect switch ($data) { case 1: $data = Horde_Image_Translation::t("Off"); break; case 2: $data = Horde_Image_Translation::t("Warm"); break; case 3: $data = Horde_Image_Translation::t("Cool"); break; case 4: $data = Horde_Image_Translation::t("Black and White"); break; case 5: $data = Horde_Image_Translation::t("Sepia"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '002a': //Burst Mode switch ($data) { case 0: $data = Horde_Image_Translation::t("Off"); break; case 1: $data = Horde_Image_Translation::t("Low/High Quality"); break; case 2: $data = Horde_Image_Translation::t("Infinite"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '002c': //Contrast switch ($data) { case 0: $data = Horde_Image_Translation::t("Standard"); break; case 1: $data = Horde_Image_Translation::t("Low"); break; case 2: $data = Horde_Image_Translation::t("High"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '002d': //Noise Reduction switch ($data) { case 0: $data = Horde_Image_Translation::t("Standard"); break; case 1: $data = Horde_Image_Translation::t("Low"); break; case 2: $data = Horde_Image_Translation::t("High"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '002e': //Self Timer switch ($data) { case 1: $data = Horde_Image_Translation::t("Off"); break; case 2: $data = Horde_Image_Translation::t("10s"); break; case 3: $data = Horde_Image_Translation::t("2s"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '0030': //Rotation switch ($data) { case 1: $data = Horde_Image_Translation::t("Horizontal (normal)"); break; case 6: $data = Horde_Image_Translation::t("Rotate 90 CW"); break; case 8: $data = Horde_Image_Translation::t("Rotate 270 CW"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '0032': //Color Mode switch ($data) { case 0: $data = Horde_Image_Translation::t("Normal"); break; case 1: $data = Horde_Image_Translation::t("Natural"); break; default: $data = sprintf(Horde_Image_Translation::t("Unknown (%s)"), $data); break; } break; case '0036': //Travel Day $data = $data; break; } break; case 'UNDEFINED': break; default: $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } break; } return $data; }
/** * Converts an exif field into human-readable form. * * Some of these cases are ported from the Exifer library, others were * changed from their implementation where the EXIF standard dictated * different behaviour. * * @param string $field The name of the field to translate. * @param string $data The data value to translate. * * @return string The converted data. */ public static function getHumanReadable($field, $data) { switch ($field) { case 'ExposureMode': switch ($data) { case 0: return Horde_Image_Translation::t("Auto exposure"); case 1: return Horde_Image_Translation::t("Manual exposure"); case 2: return Horde_Image_Translation::t("Auto bracket"); default: return Horde_Image_Translation::t("Unknown"); } case 'ExposureProgram': switch ($data) { case 1: return Horde_Image_Translation::t("Manual"); case 2: return Horde_Image_Translation::t("Normal Program"); case 3: return Horde_Image_Translation::t("Aperture Priority"); case 4: return Horde_Image_Translation::t("Shutter Priority"); case 5: return Horde_Image_Translation::t("Creative"); case 6: return Horde_Image_Translation::t("Action"); case 7: return Horde_Image_Translation::t("Portrait"); case 8: return Horde_Image_Translation::t("Landscape"); default: return Horde_Image_Translation::t("Unknown"); } case 'XResolution': case 'YResolution': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); return sprintf(Horde_Image_Translation::t("%d dots per unit"), $n); } return sprintf(Horde_Image_Translation::t("%d per unit"), $data); case 'ResolutionUnit': switch ($data) { case 1: return Horde_Image_Translation::t("Pixels"); case 2: return Horde_Image_Translation::t("Inch"); case 3: return Horde_Image_Translation::t("Centimeter"); default: return Horde_Image_Translation::t("Unknown"); } case 'ExifImageWidth': case 'ExifImageLength': return sprintf(Horde_Image_Translation::t("%d pixels"), $data); case 'Orientation': switch ($data) { case 1: return sprintf(Horde_Image_Translation::t("Normal (O deg)")); case 2: return sprintf(Horde_Image_Translation::t("Mirrored")); case 3: return sprintf(Horde_Image_Translation::t("Upsidedown")); case 4: return sprintf(Horde_Image_Translation::t("Upsidedown Mirrored")); case 5: return sprintf(Horde_Image_Translation::t("90 deg CW Mirrored")); case 6: return sprintf(Horde_Image_Translation::t("90 deg CCW")); case 7: return sprintf(Horde_Image_Translation::t("90 deg CCW Mirrored")); case 8: return sprintf(Horde_Image_Translation::t("90 deg CW")); } break; case 'ExposureTime': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($d == 0) { return; } $data = $n / $d; } return self::_formatExposure($data); case 'ShutterSpeedValue': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($d == 0) { return; } $data = $n / $d; } $data = exp($data * log(2)); if ($data > 0) { $data = 1 / $data; } return self::_formatExposure($data); case 'ApertureValue': case 'MaxApertureValue': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($d == 0) { return; } $data = $n / $d; $data = exp($data * log(2) / 2); // Precision is 1 digit. $data = round($data, 1); } return 'f/' . $data; case 'FocalLength': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($d == 0) { return; } return sprintf(Horde_Image_Translation::t("%d mm"), round($n / $d)); } return sprintf(Horde_Image_Translation::t("%d mm"), $data); case 'FNumber': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($d != 0) { return 'f/' . round($n / $d, 1); } } return 'f/' . $data; case 'ExposureBiasValue': if (strpos($data, '/') !== false) { list($n, $d) = explode('/', $data, 2); if ($n == 0) { return '0 EV'; } } return $data . ' EV'; case 'MeteringMode': switch ($data) { case 0: return Horde_Image_Translation::t("Unknown"); case 1: return Horde_Image_Translation::t("Average"); case 2: return Horde_Image_Translation::t("Center Weighted Average"); case 3: return Horde_Image_Translation::t("Spot"); case 4: return Horde_Image_Translation::t("Multi-Spot"); case 5: return Horde_Image_Translation::t("Multi-Segment"); case 6: return Horde_Image_Translation::t("Partial"); case 255: return Horde_Image_Translation::t("Other"); default: return sprintf(Horde_Image_Translation::t("Unknown: %s"), $data); } break; case 'LightSource': switch ($data) { case 1: return Horde_Image_Translation::t("Daylight"); case 2: return Horde_Image_Translation::t("Fluorescent"); case 3: return Horde_Image_Translation::t("Tungsten"); case 4: return Horde_Image_Translation::t("Flash"); case 9: return Horde_Image_Translation::t("Fine weather"); case 10: return Horde_Image_Translation::t("Cloudy weather"); case 11: return Horde_Image_Translation::t("Shade"); case 12: return Horde_Image_Translation::t("Daylight fluorescent"); case 13: return Horde_Image_Translation::t("Day white fluorescent"); case 14: return Horde_Image_Translation::t("Cool white fluorescent"); case 15: return Horde_Image_Translation::t("White fluorescent"); case 17: return Horde_Image_Translation::t("Standard light A"); case 18: return Horde_Image_Translation::t("Standard light B"); case 19: return Horde_Image_Translation::t("Standard light C"); case 20: return 'D55'; case 21: return 'D65'; case 22: return 'D75'; case 23: return 'D50'; case 24: return Horde_Image_Translation::t("ISO studio tungsten"); case 255: return Horde_Image_Translation::t("other light source"); default: return Horde_Image_Translation::t("Unknown"); } case 'WhiteBalance': switch ($data) { case 0: return Horde_Image_Translation::t("Auto"); case 1: return Horde_Image_Translation::t("Manual"); default: Horde_Image_Translation::t("Unknown"); } break; case 'FocalLengthIn35mmFilm': return $data . ' mm'; case 'Flash': switch ($data) { case 0: return Horde_Image_Translation::t("No Flash"); case 1: return Horde_Image_Translation::t("Flash"); case 5: return Horde_Image_Translation::t("Flash, strobe return light not detected"); case 7: return Horde_Image_Translation::t("Flash, strobe return light detected"); case 9: return Horde_Image_Translation::t("Compulsory Flash"); case 13: return Horde_Image_Translation::t("Compulsory Flash, Return light not detected"); case 15: return Horde_Image_Translation::t("Compulsory Flash, Return light detected"); case 16: return Horde_Image_Translation::t("No Flash"); case 24: return Horde_Image_Translation::t("No Flash"); case 25: return Horde_Image_Translation::t("Flash, Auto-Mode"); case 29: return Horde_Image_Translation::t("Flash, Auto-Mode, Return light not detected"); case 31: return Horde_Image_Translation::t("Flash, Auto-Mode, Return light detected"); case 32: return Horde_Image_Translation::t("No Flash"); case 65: return Horde_Image_Translation::t("Red Eye"); case 69: return Horde_Image_Translation::t("Red Eye, Return light not detected"); case 71: return Horde_Image_Translation::t("Red Eye, Return light detected"); case 73: return Horde_Image_Translation::t("Red Eye, Compulsory Flash"); case 77: return Horde_Image_Translation::t("Red Eye, Compulsory Flash, Return light not detected"); case 79: return Horde_Image_Translation::t("Red Eye, Compulsory Flash, Return light detected"); case 89: return Horde_Image_Translation::t("Red Eye, Auto-Mode"); case 93: return Horde_Image_Translation::t("Red Eye, Auto-Mode, Return light not detected"); case 95: return Horde_Image_Translation::t("Red Eye, Auto-Mode, Return light detected"); } break; case 'FileSize': if ($data <= 0) { return '0 Bytes'; } $s = array('B', 'kB', 'MB', 'GB'); $e = floor(log($data, 1024)); return round($data / pow(1024, $e), 2) . ' ' . $s[$e]; case 'SensingMethod': switch ($data) { case 1: return Horde_Image_Translation::t("Not defined"); case 2: return Horde_Image_Translation::t("One Chip Color Area Sensor"); case 3: return Horde_Image_Translation::t("Two Chip Color Area Sensor"); case 4: return Horde_Image_Translation::t("Three Chip Color Area Sensor"); case 5: return Horde_Image_Translation::t("Color Sequential Area Sensor"); case 7: return Horde_Image_Translation::t("Trilinear Sensor"); case 8: return Horde_Image_Translation::t("Color Sequential Linear Sensor"); default: return Horde_Image_Translation::t("Unknown"); } case 'ColorSpace': switch ($data) { case 1: return Horde_Image_Translation::t("sRGB"); default: return Horde_Image_Translation::t("Uncalibrated"); } case 'SceneCaptureType': switch ($data) { case 0: return Horde_Image_Translation::t("Standard"); case 1: return Horde_Image_Translation::t("Landscape"); case 2: return Horde_Image_Translation::t("Portrait"); case 3: return Horde_Image_Translation::t("Night Scene"); default: return Horde_Image_Translation::t("Unknown"); } case 'DateTime': case 'DateTimeOriginal': case 'DateTimeDigitized': return date('m/d/Y H:i:s O', $data); case 'UserComment': //@TODO: the first 8 bytes of this field contain the charset used // to encode the comment. Either ASCII, JIS, UNICODE, or // UNDEFINED. Should probably either convert to a known charset // here and let the calling code deal with it, or allow this // method to take an optional charset to convert to (would // introduce a dependency on Horde_String to do the conversion). $data = trim(substr($data, 7)); default: return !empty($data) ? $data : '---'; } }
/** * Formats Data for the data type */ protected function _formatData($type, $tag, $intel, $data, $exif, &$result) { $place = 0; switch ($type) { case 'ASCII': $result = $data = str_replace('\\0', '', $data); break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom != 0) { $data = $top / $bottom; } elseif ($top == 0) { $data = 0; } else { $data = $top . '/' . $bottom; } if ($tag == '0204') { //DigitalZoom $data = $data . 'x'; } case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); $result['RAWDATA'] = $data; // TODO: split this code up switch ($tag) { case '0001': //first chunk $result['Bytes'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; if ($result['Bytes'] != strlen($data) / 2) { //Bad chunk return $result; } $result['Macro'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //1 switch ($result['Macro']) { case 1: $result['Macro'] = Horde_Image_Translation::t("Macro"); break; case 2: $result['Macro'] = Horde_Image_Translation::t("Normal"); break; default: $result['Macro'] = Horde_Image_Translation::t("Unknown"); } $result['SelfTimer'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //2 switch ($result['SelfTimer']) { case 0: $result['SelfTimer'] = Horde_Image_Translation::t("Off"); break; default: $result['SelfTimer'] .= Horde_Image_Translation::t("/10s"); } $result['Quality'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //3 switch ($result['Quality']) { case 2: $result['Quality'] = Horde_Image_Translation::t("Normal"); break; case 3: $result['Quality'] = Horde_Image_Translation::t("Fine"); break; case 5: $result['Quality'] = Horde_Image_Translation::t("Superfine"); break; default: $result['Quality'] = Horde_Image_Translation::t("Unknown"); } $result['Flash'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //4 switch ($result['Flash']) { case 0: $result['Flash'] = Horde_Image_Translation::t("Off"); break; case 1: $result['Flash'] = Horde_Image_Translation::t("Auto"); break; case 2: $result['Flash'] = Horde_Image_Translation::t("On"); break; case 3: $result['Flash'] = Horde_Image_Translation::t("Red Eye Reduction"); break; case 4: $result['Flash'] = Horde_Image_Translation::t("Slow Synchro"); break; case 5: $result['Flash'] = Horde_Image_Translation::t("Auto + Red Eye Reduction"); break; case 6: $result['Flash'] = Horde_Image_Translation::t("On + Red Eye Reduction"); break; case 16: $result['Flash'] = Horde_Image_Translation::t("External Flash"); break; default: $result['Flash'] = Horde_Image_Translation::t("Unknown"); } $result['DriveMode'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //5 switch ($result['DriveMode']) { case 0: $result['DriveMode'] = Horde_Image_Translation::t("Single/Timer"); break; case 1: $result['DriveMode'] = Horde_Image_Translation::t("Continuous"); break; default: $result['DriveMode'] = Horde_Image_Translation::t("Unknown"); } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //6 $result['FocusMode'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //7 switch ($result['FocusMode']) { case 0: $result['FocusMode'] = Horde_Image_Translation::t("One-Shot"); break; case 1: $result['FocusMode'] = Horde_Image_Translation::t("AI Servo"); break; case 2: $result['FocusMode'] = Horde_Image_Translation::t("AI Focus"); break; case 3: $result['FocusMode'] = Horde_Image_Translation::t("Manual Focus"); break; case 4: $result['FocusMode'] = Horde_Image_Translation::t("Single"); break; case 5: $result['FocusMode'] = Horde_Image_Translation::t("Continuous"); break; case 6: $result['FocusMode'] = Horde_Image_Translation::t("Manual Focus"); break; default: $result['FocusMode'] = Horde_Image_Translation::t("Unknown"); } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //8 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //9 $result['ImageSize'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //10 switch ($result['ImageSize']) { case 0: $result['ImageSize'] = Horde_Image_Translation::t("Large"); break; case 1: $result['ImageSize'] = Horde_Image_Translation::t("Medium"); break; case 2: $result['ImageSize'] = Horde_Image_Translation::t("Small"); break; default: $result['ImageSize'] = Horde_Image_Translation::t("Unknown"); } $result['EasyShooting'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //11 switch ($result['EasyShooting']) { case 0: $result['EasyShooting'] = Horde_Image_Translation::t("Full Auto"); break; case 1: $result['EasyShooting'] = Horde_Image_Translation::t("Manual"); break; case 2: $result['EasyShooting'] = Horde_Image_Translation::t("Landscape"); break; case 3: $result['EasyShooting'] = Horde_Image_Translation::t("Fast Shutter"); break; case 4: $result['EasyShooting'] = Horde_Image_Translation::t("Slow Shutter"); break; case 5: $result['EasyShooting'] = Horde_Image_Translation::t("Night"); break; case 6: $result['EasyShooting'] = Horde_Image_Translation::t("Black & White"); break; case 7: $result['EasyShooting'] = Horde_Image_Translation::t("Sepia"); break; case 8: $result['EasyShooting'] = Horde_Image_Translation::t("Portrait"); break; case 9: $result['EasyShooting'] = Horde_Image_Translation::t("Sport"); break; case 10: $result['EasyShooting'] = Horde_Image_Translation::t("Macro/Close-Up"); break; case 11: $result['EasyShooting'] = Horde_Image_Translation::t("Pan Focus"); break; default: $result['EasyShooting'] = Horde_Image_Translation::t("Unknown"); } $result['DigitalZoom'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //12 switch ($result['DigitalZoom']) { case 0: case 65535: $result['DigitalZoom'] = Horde_Image_Translation::t("None"); break; case 1: $result['DigitalZoom'] = Horde_Image_Translation::t("2x"); break; case 2: $result['DigitalZoom'] = Horde_Image_Translation::t("4x"); break; default: $result['DigitalZoom'] = Horde_Image_Translation::t("Unknown"); } $result['Contrast'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //13 switch ($result['Contrast']) { case 0: $result['Contrast'] = Horde_Image_Translation::t("Normal"); break; case 1: $result['Contrast'] = Horde_Image_Translation::t("High"); break; case 65535: $result['Contrast'] = Horde_Image_Translation::t("Low"); break; default: $result['Contrast'] = Horde_Image_Translation::t("Unknown"); } $result['Saturation'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //14 switch ($result['Saturation']) { case 0: $result['Saturation'] = Horde_Image_Translation::t("Normal"); break; case 1: $result['Saturation'] = Horde_Image_Translation::t("High"); break; case 65535: $result['Saturation'] = Horde_Image_Translation::t("Low"); break; default: $result['Saturation'] = Horde_Image_Translation::t("Unknown"); } $result['Sharpness'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //15 switch ($result['Sharpness']) { case 0: $result['Sharpness'] = Horde_Image_Translation::t("Normal"); break; case 1: $result['Sharpness'] = Horde_Image_Translation::t("High"); break; case 65535: $result['Sharpness'] = Horde_Image_Translation::t("Low"); break; default: $result['Sharpness'] = Horde_Image_Translation::t("Unknown"); } $result['ISO'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //16 switch ($result['ISO']) { case 32767: case 0: $result['ISO'] = isset($exif['SubIFD']['ISOSpeedRatings']) ? $exif['SubIFD']['ISOSpeedRatings'] : 'Unknown'; break; case 15: $result['ISO'] = Horde_Image_Translation::t("Auto"); break; case 16: $result['ISO'] = 50; break; case 17: $result['ISO'] = 100; break; case 18: $result['ISO'] = 200; break; case 19: $result['ISO'] = 400; break; default: $result['ISO'] = Horde_Image_Translation::t("Unknown"); } $result['MeteringMode'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //17 switch ($result['MeteringMode']) { case 3: $result['MeteringMode'] = Horde_Image_Translation::t("Evaluative"); break; case 4: $result['MeteringMode'] = Horde_Image_Translation::t("Partial"); break; case 5: $result['MeteringMode'] = Horde_Image_Translation::t("Center-weighted"); break; default: $result['MeteringMode'] = Horde_Image_Translation::t("Unknown"); } $result['FocusType'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //18 switch ($result['FocusType']) { case 0: $result['FocusType'] = Horde_Image_Translation::t("Manual"); break; case 1: $result['FocusType'] = Horde_Image_Translation::t("Auto"); break; case 3: $result['FocusType'] = Horde_Image_Translation::t("Close-up (Macro)"); break; case 8: $result['FocusType'] = Horde_Image_Translation::t("Locked (Pan Mode)"); break; default: $result['FocusType'] = Horde_Image_Translation::t("Unknown"); } $result['AFPointSelected'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //19 switch ($result['AFPointSelected']) { case 12288: $result['AFPointSelected'] = Horde_Image_Translation::t("Manual Focus"); break; case 12289: $result['AFPointSelected'] = Horde_Image_Translation::t("Auto Selected"); break; case 12290: $result['AFPointSelected'] = Horde_Image_Translation::t("Right"); break; case 12291: $result['AFPointSelected'] = Horde_Image_Translation::t("Center"); break; case 12292: $result['AFPointSelected'] = Horde_Image_Translation::t("Left"); break; default: $result['AFPointSelected'] = Horde_Image_Translation::t("Unknown"); } $result['ExposureMode'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //20 switch ($result['ExposureMode']) { case 0: $result['ExposureMode'] = Horde_Image_Translation::t("EasyShoot"); break; case 1: $result['ExposureMode'] = Horde_Image_Translation::t("Program"); break; case 2: $result['ExposureMode'] = Horde_Image_Translation::t("Tv"); break; case 3: $result['ExposureMode'] = Horde_Image_Translation::t("Av"); break; case 4: $result['ExposureMode'] = Horde_Image_Translation::t("Manual"); break; case 5: $result['ExposureMode'] = Horde_Image_Translation::t("Auto-DEP"); break; default: $result['ExposureMode'] = Horde_Image_Translation::t("Unknown"); } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //21 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //22 $result['LongFocalLength'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //23 $result['LongFocalLength'] .= 'focal units'; $result['ShortFocalLength'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //24 $result['ShortFocalLength'] .= ' focal units'; $result['FocalUnits'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //25 $result['FocalUnits'] .= ' per mm'; $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //26 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //27 $result['FlashActivity'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //28 switch ($result['FlashActivity']) { case 0: $result['FlashActivity'] = Horde_Image_Translation::t("Flash Did Not Fire"); break; case 1: $result['FlashActivity'] = Horde_Image_Translation::t("Flash Fired"); break; default: $result['FlashActivity'] = Horde_Image_Translation::t("Unknown"); } $result['FlashDetails'] = str_pad(base_convert(Horde_Image_Exif::intel2Moto(substr($data, $place, 4)), 16, 2), 16, '0', STR_PAD_LEFT); $place += 4; //29 $flashDetails = array(); if (substr($result['FlashDetails'], 1, 1) == 1) { $flashDetails[] = Horde_Image_Translation::t("External E-TTL"); } if (substr($result['FlashDetails'], 2, 1) == 1) { $flashDetails[] = Horde_Image_Translation::t("Internal Flash"); } if (substr($result['FlashDetails'], 4, 1) == 1) { $flashDetails[] = Horde_Image_Translation::t("FP sync used"); } if (substr($result['FlashDetails'], 8, 1) == 1) { $flashDetails[] = Horde_Image_Translation::t("2nd(rear)-curtain sync used"); } if (substr($result['FlashDetails'], 12, 1) == 1) { $flashDetails[] = Horde_Image_Translation::t("1st curtain sync"); } $result['FlashDetails'] = implode(',', $flashDetails); $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //30 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //31 $anotherFocusMode = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //32 if (strpos(strtoupper($exif['IFD0']['Model']), 'G1') !== false) { switch ($anotherFocusMode) { case 0: $result['FocusMode'] = Horde_Image_Translation::t("Single"); break; case 1: $result['FocusMode'] = Horde_Image_Translation::t("Continuous"); break; default: $result['FocusMode'] = Horde_Image_Translation::t("Unknown"); } } break; case '0004': //second chunk $result['Bytes'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //0 if ($result['Bytes'] != strlen($data) / 2) { return $result; //Bad chunk } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //1 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //2 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //3 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //4 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //5 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //6 $result['WhiteBalance'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //7 switch ($result['WhiteBalance']) { case 0: $result['WhiteBalance'] = Horde_Image_Translation::t("Auto"); break; case 1: $result['WhiteBalance'] = Horde_Image_Translation::t("Sunny"); break; case 2: $result['WhiteBalance'] = Horde_Image_Translation::t("Cloudy"); break; case 3: $result['WhiteBalance'] = Horde_Image_Translation::t("Tungsten"); break; case 4: $result['WhiteBalance'] = Horde_Image_Translation::t("Fluorescent"); break; case 5: $result['WhiteBalance'] = Horde_Image_Translation::t("Flash"); break; case 6: $result['WhiteBalance'] = Horde_Image_Translation::t("Custom"); break; default: $result['WhiteBalance'] = Horde_Image_Translation::t("Unknown"); } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //8 $result['SequenceNumber'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //9 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //10 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //11 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //12 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //13 $result['AFPointUsed'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //14 $afPointUsed = array(); if ($result['AFPointUsed'] & 0x1) { $afPointUsed[] = Horde_Image_Translation::t("Right"); //bit 0 } if ($result['AFPointUsed'] & 0x2) { $afPointUsed[] = Horde_Image_Translation::t("Center"); //bit 1 } if ($result['AFPointUsed'] & 0x4) { $afPointUsed[] = Horde_Image_Translation::t("Left"); //bit 2 } if ($result['AFPointUsed'] & 0x800) { $afPointUsed[] = 12; //bit 12 } if ($result['AFPointUsed'] & 0x1000) { $afPointUsed[] = 13; //bit 13 } if ($result['AFPointUsed'] & 0x2000) { $afPointUsed[] = 14; //bit 14 } if ($result['AFPointUsed'] & 0x4000) { $afPointUsed[] = 15; //bit 15 } $result['AFPointUsed'] = implode(',', $afPointUsed); $result['FlashBias'] = Horde_Image_Exif::intel2Moto(substr($data, $place, 4)); $place += 4; //15 switch ($result['FlashBias']) { case 'ffc0': $result['FlashBias'] = '-2 EV'; break; case 'ffcc': $result['FlashBias'] = '-1.67 EV'; break; case 'ffd0': $result['FlashBias'] = '-1.5 EV'; break; case 'ffd4': $result['FlashBias'] = '-1.33 EV'; break; case 'ffe0': $result['FlashBias'] = '-1 EV'; break; case 'ffec': $result['FlashBias'] = '-0.67 EV'; break; case 'fff0': $result['FlashBias'] = '-0.5 EV'; break; case 'fff4': $result['FlashBias'] = '-0.33 EV'; break; case '0000': $result['FlashBias'] = '0 EV'; break; case '000c': $result['FlashBias'] = '0.33 EV'; break; case '0010': $result['FlashBias'] = '0.5 EV'; break; case '0014': $result['FlashBias'] = '0.67 EV'; break; case '0020': $result['FlashBias'] = '1 EV'; break; case '002c': $result['FlashBias'] = '1.33 EV'; break; case '0030': $result['FlashBias'] = '1.5 EV'; break; case '0034': $result['FlashBias'] = '1.67 EV'; break; case '0040': $result['FlashBias'] = '2 EV'; break; default: $result['FlashBias'] = Horde_Image_Translation::t("Unknown"); } $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //16 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //17 $result['Unknown'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //18 $result['SubjectDistance'] = hexdec(Horde_Image_Exif::intel2Moto(substr($data, $place, 4))); $place += 4; //19 $result['SubjectDistance'] .= '/100 m'; break; case '0008': //image number if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); $result = round($data / 10000) . '-' . $data % 10000; break; case '000c': //camera serial number if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); $result = '#' . bin2hex(substr($data, 0, 16)) . substr($data, 16, 16); break; } break; default: if ($type != 'UNDEFINED') { $data = bin2hex($data); if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } } break; } return $data; }
/** * * @param $type * @param $tag * @param $intel * @param $data * @return unknown_type */ protected function _formatData($type, $tag, $intel, $data) { switch ($type) { case 'ASCII': case 'UNDEFINED': break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom) { $data = $top / $bottom; } elseif (!$top) { $data = 0; } else { $data = $top . '/' . $bottom; } if ($tag == '1011') { //FlashStrength $data = $data . ' EV'; } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); switch ($tag) { case '1001': //Sharpness switch ($data) { case 1: $data = Horde_Image_Translation::t("Soft"); break; case 2: $data = Horde_Image_Translation::t("Soft"); break; case 3: $data = Horde_Image_Translation::t("Normal"); break; case 4: $data = Horde_Image_Translation::t("Hard"); break; case 5: $data = Horde_Image_Translation::t("Hard"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '1002': //WhiteBalance switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto"); break; case 256: $data = Horde_Image_Translation::t("Daylight"); break; case 512: $data = Horde_Image_Translation::t("Cloudy"); break; case 768: $data = Horde_Image_Translation::t("DaylightColor-fluorescence"); break; case 769: $data = Horde_Image_Translation::t("DaywhiteColor-fluorescence"); break; case 770: $data = Horde_Image_Translation::t("White-fluorescence"); break; case 1024: $data = Horde_Image_Translation::t("Incandescense"); break; case 3840: $data = Horde_Image_Translation::t("Custom"); break; default: $data = Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; case '1003': //Color switch ($data) { case 0: $data = Horde_Image_Translation::t("Chroma Saturation Normal(STD)"); break; case 256: $data = Horde_Image_Translation::t("Chroma Saturation High"); break; case 512: $data = Horde_Image_Translation::t("Chroma Saturation Low(ORG)"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1004': //Tone switch ($data) { case 0: $data = Horde_Image_Translation::t("Contrast Normal(STD)"); break; case 256: $data = Horde_Image_Translation::t("Contrast High(HARD)"); break; case 512: $data = Horde_Image_Translation::t("Contrast Low(ORG)"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1010': //FlashMode switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto"); break; case 1: $data = Horde_Image_Translation::t("On"); break; case 2: $data = Horde_Image_Translation::t("Off"); break; case 3: $data = Horde_Image_Translation::t("Red-Eye Reduction"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1020': //Macro switch ($data) { case 0: $data = Horde_Image_Translation::t("Off"); break; case 1: $data = Horde_Image_Translation::t("On"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1021': //FocusMode switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto"); break; case 1: $data = Horde_Image_Translation::t("Manual"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1030': //SlowSync switch ($data) { case 0: $data = Horde_Image_Translation::t("Off"); break; case 1: $data = Horde_Image_Translation::t("On"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1031': //PictureMode switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto"); break; case 1: $data = Horde_Image_Translation::t("Portrait"); break; case 2: $data = Horde_Image_Translation::t("Landscape"); break; case 4: $data = Horde_Image_Translation::t("Sports"); break; case 5: $data = Horde_Image_Translation::t("Night"); break; case 6: $data = Horde_Image_Translation::t("Program AE"); break; case 256: $data = Horde_Image_Translation::t("Aperture Prority AE"); break; case 512: $data = Horde_Image_Translation::t("Shutter Priority"); break; case 768: $data = Horde_Image_Translation::t("Manual Exposure"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1100': //ContinuousTakingBracket switch ($data) { case 0: $data = Horde_Image_Translation::t("Off"); break; case 1: $data = Horde_Image_Translation::t("On"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1300': //BlurWarning switch ($data) { case 0: $data = Horde_Image_Translation::t("No Warning"); break; case 1: $data = Horde_Image_Translation::t("Warning"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1301': //FocusWarning switch ($data) { case 0: $data = Horde_Image_Translation::t("Auto Focus Good"); break; case 1: $data = Horde_Image_Translation::t("Out of Focus"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; case '1302': //AEWarning switch ($data) { case 0: $data = Horde_Image_Translation::t("AE Good"); break; case 1: $data = Horde_Image_Translation::t("Over Exposure"); break; default: $data = Horde_Image_Translation::t("Unknown: ") . $data; break; } break; } break; default: $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } break; } return $data; }
/** * * @param $type * @param $tag * @param $intel * @param $data * @return unknown_type */ protected function _formatData($type, $tag, $intel, $data) { switch ($type) { case 'ASCII': case 'UNDEFINED': break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $top = hexdec(substr($data, 8, 8)); $bottom = hexdec(substr($data, 0, 8)); if ($bottom) { $data = $top / $bottom; } elseif (!$top) { $data = 0; } else { $data = $top . '/' . $bottom; } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } $data = hexdec($data); switch ($tag) { case '0200': //SpecialMode $data = $data == 0 ? Horde_Image_Translation::t("Normal") : Horde_Image_Translation::t("Unknown") . ': ' . $data; break; case '0201': //Quality $data = $data == 2 ? Horde_Image_Translation::t("High") : Horde_Image_Translation::t("Unknown") . ': ' . $data; break; case '0202': //Macro $data = $data == 0 ? Horde_Image_Translation::t("Normal") : Horde_Image_Translation::t("Unknown") . ': ' . $data; break; } break; default: $data = bin2hex($data); if ($intel) { $data = Horde_Image_Exif::intel2Moto($data); } } return $data; }
/** * * @param $type * @param $tag * @param $intel * @param $data * @return unknown_type */ protected function _formatData($type, $tag, $intel, $data) { switch ($type) { case 'ASCII': // Search for a null byte and stop there. if (($pos = strpos($data, chr(0))) !== false) { $data = substr($data, 0, $pos); } // Format certain kinds of strings nicely (Camera make etc.) if ($tag == '010f') { $data = Horde_String::ucwords(Horde_String::lower(trim($data))); } break; case 'URATIONAL': case 'SRATIONAL': $data = bin2hex($data); if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } if ($intel == 1) { // intel stores them bottom-top $top = hexdec(substr($data, 8, 8)); } else { // motorola stores them top-bottom $top = hexdec(substr($data, 0, 8)); } if ($intel == 1) { // intel stores them bottom-top $bottom = hexdec(substr($data, 0, 8)); } else { // motorola stores them top-bottom $bottom = hexdec(substr($data, 8, 8)); } if ($type == 'SRATIONAL' && $top > 2147483647) { // this makes the number signed instead of unsigned $top = $top - 4294967296; } if ($bottom != 0) { $data = $top / $bottom; } elseif ($top == 0) { $data = 0; } else { $data = $top . '/' . $bottom; } // Exposure Time if ($tag == '829a') { if ($bottom != 0) { $data = $top . '/' . $bottom; } else { $data = 0; } } break; case 'USHORT': case 'SSHORT': case 'ULONG': case 'SLONG': case 'FLOAT': case 'DOUBLE': $data = bin2hex($data); if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } if ($intel == 0 && ($type == 'USHORT' || $type == 'SSHORT')) { $data = substr($data, 0, 4); } $data = hexdec($data); if ($type == 'SSHORT' && $data > 32767) { // this makes the number signed instead of unsigned $data = $data - 65536; } if ($type == 'SLONG' && $data > 2147483647) { // this makes the number signed instead of unsigned $data = $data - 4294967296; } break; case 'UNDEFINED': // ExifVersion,FlashPixVersion,InteroperabilityVersion if ($tag == '9000' || $tag == 'a000' || $tag == '0002') { $data = sprintf(Horde_Image_Translation::t("version %d"), $data / 100); } break; default: $data = bin2hex($data); if ($intel == 1) { $data = Horde_Image_Exif::intel2Moto($data); } break; } return $data; }