$value ) { // Check that the value exists if ( $value !== NULL ) { // Process the settings according to their offset if ( $offset == 0 ) { // Do Not Show this Field ( Number of Bytes in Tag ) } else if ( $offset == 2 ) { if ( $value == 0 ) { $output_str .= "Self timer not used\n"; } else { $output_str .= "Self timer length : ". ($value/10) . " seconds\n"; } } else if ( ( $offset == 23 ) && ( $Exif_Tag['Data'][25] != 0 )) { $output_str .= "Maximum Focal Length of Lens: " . ($value / $Exif_Tag['Data'][25]) . "mm\n"; } else if ( ( $offset == 24 ) && ( $Exif_Tag['Data'][25] != 0 )) { $output_str .= "Minimum Focal Length of Lens: " . ($value / $Exif_Tag['Data'][25]) . "mm\n"; } else if ( $offset == 25 ) { // Do Not Show this Field ( Focal Length units per mm ) } else if ( $offset == 29 ) { if ( $value & 0x4000 == 0x4000 ) { $output_str .= "External E-TTL Flash\n"; } if ( $value & 0x2000 == 0x2000 ) { $output_str .= "Internal Flash\n"; } if ( $value & 0x0800 == 0x0800 ) { $output_str .= "Flash FP sync used\n"; } if ( $value & 0x0080 == 0x0080 ) { $output_str .= "Second (Rear) curtain flash sync used\n"; } if ( $value & 0x0008 == 0x0008 ) { $output_str .= "Flash FP sync enabled\n"; } } else if ( array_key_exists( $offset, $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ] ) ) { if ( array_key_exists( $value, $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ][$offset] ) ) { $output_str .= $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ][$offset]['Name'] . ": " . $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ][$offset][$value] . "\n"; } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { $output_str .= $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ][$offset]['Name'] . ": Unknown Value ($value)\n"; } } } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { // Unknown Canon camera setting $output_str .= " Unknown Setting ($offset), value: $value\n"; } } } } // Return the text string return $output_str; break; // CAMERA SETTINGS 2 case 4: // Create an output string $output_str = ""; // Cycle through each of the camera settings Values foreach( $Exif_Tag['Data'] as $offset => $value ) { // Check that the value exists if ( $value !== NULL ) { // Process the settings according to their offset if ( $offset == 0 ) { // Do Not Show this Field ( Number of Bytes in Tag ) } else if ( $offset == 9 ) { $output_str .= "Sequence Number in a continuous burst : $value\n"; } else if ( $offset == 14 ) { $output_str .= "Number of Focus Points Available: ". ( ( $value & 0xF000 ) / 0x1000 ) . "\n"; if ( $value & 0x0004 == 0x0004 ) { $output_str .= "Left Focus Point Used\n"; } if ( $value & 0x0002 == 0x0002 ) { $output_str .= "Centre Focus Point Used\n"; } if ( $value & 0x0001 == 0x0001 ) { $output_str .= "Right Focus Point Used\n"; } } else if ( $offset == 19 ) { $output_str .= "Subject distance: $value (units either mm or cm)\n"; } else if ( array_key_exists( $offset, $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ] ) ) { if ( array_key_exists( $value, $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ][$offset] ) ) { $output_str .= $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ][$offset]['Name'] . ": " . $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ][$offset][$value] . "\n"; } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { $output_str .= $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ][$offset]['Name'] . ": Unknown Value ($value)\n"; } } } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { $output_str .= " Unknown Setting ($offset), value: $value\n"; } } } } // Return the text string return $output_str; break; // Serial Number case 12: $output_str = sprintf ( "%04X%05d", (($Exif_Tag['Data'][0] & 0xFF00)/256), ($Exif_Tag['Data'][0] & 0x00FF) ); break; // Custom Functions case 15: // Create an output string $output_str = ""; // The size element is the first of the value array // get rid of it $tmparray = $Exif_Tag['Data']; array_shift ( $tmparray ); // Cycle through each of the custom functions foreach( $tmparray as $valorder => $value ) { // Figure out the function number and value $funcno = ( $value & 0xFF00 ) / 256; $funcval = $value & 0x00FF; // Check if the function exists in the lookup table of custom functions if ( array_key_exists( $funcno, $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ] ) ) { // Function Exists in lookup table, // Check if value exists for this function in the lookup table if ( array_key_exists( $funcval, $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ][$funcno] ) ) { // Value exists - Add it to the output text $output_str .= $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ][$funcno]['Name'] . ": " . $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ][$funcno][$funcval] . "\n"; } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { // Value doesn't exist - Add a message to the output text $output_str .= $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ][$funcno]['Name'] . ": Unknown Value ($value)\n"; } } } else { if ( $GLOBALS['HIDE_UNKNOWN_TAGS'] == FALSE ) { // Function doesn't exist in lookup table - add a message to the output text $output_str .= "Unknown Custom Function ($funcno), value: $funcval\n"; } } } // Return the resulting string return $output_str; break; default : return FALSE; } return FALSE; } /****************************************************************************** * End of Function: get_Canon_Text_Value ******************************************************************************/ /****************************************************************************** * Global Variable: IFD_Tag_Definitions, Canon * * Contents: This global variable provides definitions of the known Canon * Makernote tags, indexed by their tag number. * ******************************************************************************/ $GLOBALS[ "IFD_Tag_Definitions" ]['Canon'] = array( 1 => array( 'Name' => "Camera Settings 1", 'Type' => "Special" ), 4 => array( 'Name' => "Camera Settings 2", 'Type' => "Special" ), 6 => array( 'Name' => "Image Type", 'Type' => "String" ), 7 => array( 'Name' => "Firmware Version", 'Type' => "String" ), 8 => array( 'Name' => "Image Number", 'Type' => "Numeric" ), 9 => array( 'Name' => "Owner Name", 'Type' => "String" ), 12 => array( 'Name' => "Camera Serial Number", 'Type' => "Special" ), 15 => array( 'Name' => "Custom Functions", 'Type' => "Special" ) ); /****************************************************************************** * End of Global Variable: IFD_Tag_Definitions, Canon ******************************************************************************/ /****************************************************************************** * Global Variable: Canon_Camera_Settings_1_Tag_Values * * Contents: This global variable provides definitions for the Canon Camera * Settings 1 Makernote tag, indexed by their offset. * ******************************************************************************/ $GLOBALS[ "Canon_Camera_Settings_1_Tag_Values" ] = array( 1 => array( 'Name' => "Macro Mode", 1 => "Macro", 2 => "Normal ( Not Macro )" ), 3 => array( 'Name' => "Quality", 2 => "Normal", 3 => "Fine", 5 => "Superfine" ), 4 => array( 'Name' => "Flash Mode", 0 => "Flash Not Fired", 1 => "Auto", 2 => "On", 3 => "Red Eye Reduction", 4 => "Slow Synchro", 5 => "Auto + Red Eye Reduction", 6 => "On + Red Eye Reduction", 16 => "External Flash" ), 5 => array( 'Name' => "Continuous drive mode", 0 => "Single Frame or Timer Mode", 1 => "Continuous" ), 7 => array( 'Name' => "Focus Mode", 0 => "One-Shot", 1 => "AI Servo", 2 => "AI Focus", 3 => "Manual Focus", 4 => "Single", 5 => "Continuous", 6 => "Manual Focus" ), 10 => array( 'Name' => "Image Size", 0 => "Large", 1 => "Medium", 2 => "Small" ), 11 => array( 'Name' => "Easy shooting Mode", 0 => "Full Auto", 1 => "Manual", 2 => "Landscape", 3 => "Fast Shutter", 4 => "Slow Shutter", 5 => "Night", 6 => "Black & White", 7 => "Sepia", 8 => "Portrait", 9 => "Sports", 10 => "Macro / Close-Up", 11 => "Pan Focus" ), 12 => array( 'Name' => "Digital Zoom", 0 => "No Digital Zoom", 1 => "2x", 2 => "4x" ), 13 => array( 'Name' => "Contrast", 0 => "Normal", 1 => "High", 65535 => "Low" ), 14 => array( 'Name' => "Saturation", 0 => "Normal", 1 => "High", 65535 => "Low" ), 15 => array( 'Name' => "Sharpness", 0 => "Normal", 1 => "High", 65535 => "Low" ), 16 => array( 'Name' => "ISO Speed", 0 => "Check ISOSpeedRatings EXIF tag for ISO Speed", 15 => "Auto ISO", 16 => "ISO 50", 17 => "ISO 100", 18 => "ISO 200", 19 => "ISO 400" ), 17 => array( 'Name' => "Metering Mode", 3 => "Evaluative", 4 => "Partial", 5 => "Centre Weighted" ), 18 => array( 'Name' => "Focus Type", 0 => "Manual", 1 => "Auto", 3 => "Close-up (Macro)", 8 => "Locked (Pan Mode)" ), 19 => array( 'Name' => "Auto Focus Point Selected", 12288 => "None (Manual Focus)", 12289 => "Auto Selected", 12290 => "Right", 12291 => "Centre", 12292 => "Left" ), 20 => array( 'Name' => "Exposure Mode", 0 => "Easy Shooting (See Easy Shooting Mode)", 1 => "Program", 2 => "Tv-Priority", 3 => "Av-Priority", 4 => "Manual", 5 => "A-DEP" ), 28 => array( 'Name' => "Flash Activity", 0 => "Flash Did Not Fire", 1 => "Flash Fired" ), 32 => array( 'Name' => "Focus Mode", 0 => "Focus Mode: Single", 1 => "Focus Mode: Continuous" ) ); /****************************************************************************** * End of Global Variable: Canon_Camera_Settings_1_Tag_Values ******************************************************************************/ /****************************************************************************** * Global Variable: Canon_Camera_Settings_2_Tag_Values * * Contents: This global variable provides definitions for the Canon Camera * Settings 2 Makernote tag, indexed by their offset. * ******************************************************************************/ $GLOBALS[ "Canon_Camera_Settings_2_Tag_Values" ] = array( 7 => array ( 'Name' => "White Balance", 0 => "Auto", 1 => "Sunny", 2 => "Cloudy", 3 => "Tungsten", 4 => "Flourescent", 5 => "Flash", 6 => "Custom" ), 15 => array( 'Name' => "Flash Bias", 0xffc0 => "-2 EV", 0xffcc => "-1.67 EV", 0xffd0 => "-1.5 EV", 0xffd4 => "-1.33 EV", 0xffe0 => "-1 EV", 0xffec => "-0.67 EV", 0xfff0 => "-0.5 EV", 0xfff4 => "-0.33 EV", 0x0000 => "0 EV", 0x000c => "0.33 EV", 0x0010 => "0.5 EV", 0x0014 => "0.67 EV", 0x0020 => "1 EV", 0x002c => "1.33 EV", 0x0030 => "1.5 EV", 0x0034 => "1.67 EV", 0x0040 => "2 EV" ), ); /****************************************************************************** * End of Global Variable: Canon_Camera_Settings_2_Tag_Values ******************************************************************************/ /****************************************************************************** * Global Variable: Canon_Custom_Functions_Tag_Values * * Contents: This global variable provides definitions for the Canon Custom * Functions Makernote tag, indexed by their offset. * ******************************************************************************/ $GLOBALS[ "Canon_Custom_Functions_Tag_Values" ] = array( 1 => array ( 'Name' => "Long Exposure Noise Reduction", 0 => "Off", 1 => "On" ), 2 => array ( 'Name' => "Shutter/Auto Exposure-lock buttons", 0 => "AF/AE lock", 1 => "AE lock/AF", 2 => "AF/AF lock", 3 => "AE+release/AE+AF" ), 3 => array ( 'Name' => "Mirror lockup", 0 => "Disable", 1 => "Enable" ), 4 => array ( 'Name' => "Tv/Av and exposure level", 0 => "1/2 stop", 1 => "1/3 stop" ), 5 => array ( 'Name' => "AF-assist light", 0 => "On (Auto)", 1 => "Off" ), 6 => array ( 'Name' => "Shutter speed in Av mode", 0 => "Automatic", 1 => "1/200 (fixed)" ), 7 => array ( 'Name' => "Auto-Exposure Bracketting sequence/auto cancellation", 0 => "0,-,+ / Enabled", 1 => "0,-,+ / Disabled", 2 => "-,0,+ / Enabled", 3 => "-,0,+ / Disabled" ), 8 => array ( 'Name' => "Shutter Curtain Sync", 0 => "1st Curtain Sync", 1 => "2nd Curtain Sync" ), 9 => array ( 'Name' => "Lens Auto-Focus stop button Function Switch", 0 => "AF stop", 1 => "Operate AF", 2 => "Lock AE and start timer" ), 10 => array ( 'Name' => "Auto reduction of fill flash", 0 => "Enable", 1 => "Disable" ), 11 => array ( 'Name' => "Menu button return position", 0 => "Top", 1 => "Previous (volatile)", 2 => "Previous" ), 12 => array ( 'Name' => "SET button function when shooting", 0 => "Not Assigned", 1 => "Change Quality", 2 => "Change ISO Speed", 3 => "Select Parameters" ), 13 => array ( 'Name' => "Sensor cleaning", 0 => "Disable", 1 => "Enable" ) ); /****************************************************************************** * End of Global Variable: Canon_Custom_Functions_Tag_Values ******************************************************************************/ ?>