summaryrefslogtreecommitdiff
path: root/includes/jpeg_metadata_tk/EXIF_Makernote.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/jpeg_metadata_tk/EXIF_Makernote.php')
-rw-r--r--includes/jpeg_metadata_tk/EXIF_Makernote.php334
1 files changed, 334 insertions, 0 deletions
diff --git a/includes/jpeg_metadata_tk/EXIF_Makernote.php b/includes/jpeg_metadata_tk/EXIF_Makernote.php
new file mode 100644
index 0000000..ceb82f4
--- /dev/null
+++ b/includes/jpeg_metadata_tk/EXIF_Makernote.php
@@ -0,0 +1,334 @@
+<?php
+
+/******************************************************************************
+*
+* Filename: EXIF_Makernote.php
+*
+* Description: Provides functions for reading EXIF Makernote Information
+* The actual functions for reading each manufacturers makernote
+* are provided in the Makernotes directory.
+*
+* Author: Evan Hunter
+*
+* Date: 23/7/2004
+*
+* Project: PHP JPEG Metadata Toolkit
+*
+* Revision: 1.11
+*
+* Changes: 1.00 -> 1.11 : changed makernotes directory definition to allow
+* the toolkit to be portable across directories
+*
+* URL: http://electronics.ozhiker.com
+*
+* Copyright: Copyright Evan Hunter 2004
+*
+* License: This file is part of the PHP JPEG Metadata Toolkit.
+*
+* The PHP JPEG Metadata Toolkit is free software; you can
+* redistribute it and/or modify it under the terms of the
+* GNU General Public License as published by the Free Software
+* Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* The PHP JPEG Metadata Toolkit is distributed in the hope
+* that it will be useful, but WITHOUT ANY WARRANTY; without
+* even the implied warranty of MERCHANTABILITY or FITNESS
+* FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* for more details.
+*
+* You should have received a copy of the GNU General Public
+* License along with the PHP JPEG Metadata Toolkit; if not,
+* write to the Free Software Foundation, Inc., 59 Temple
+* Place, Suite 330, Boston, MA 02111-1307 USA
+*
+* If you require a different license for commercial or other
+* purposes, please contact the author: evan@ozhiker.com
+*
+******************************************************************************/
+
+
+// Create the Makernote Parser and Interpreter Function Array
+
+$GLOBALS['Makernote_Function_Array'] = array( "Read_Makernote_Tag" => array( ),
+ "get_Makernote_Text_Value" => array( ),
+ "Interpret_Makernote_to_HTML" => array( ) );
+
+
+// Include the Main TIFF and EXIF Tags array
+
+include_once 'EXIF.php';
+
+
+
+/******************************************************************************
+*
+* Include the Makernote Scripts
+*
+******************************************************************************/
+
+// Set the Makernotes Directory
+
+$dir = dirname(__FILE__) . "/Makernotes/"; // Change: as of version 1.11 - to allow directory portability
+
+// Open the directory
+$dir_hnd = @opendir ( $dir );
+
+// Cycle through each of the files in the Makernotes directory
+
+while ( ( $file = readdir( $dir_hnd ) ) !== false )
+{
+ // Check if the current item is a file
+ if ( is_file ( $dir . $file ) )
+ {
+ // Item is a file, break it into it's parts
+ $path_parts = pathinfo( $dir . $file );
+
+ // Check if the extension is php
+ if ( $path_parts["extension"] == "php" )
+ {
+ // This is a php script - include it
+ include_once ($dir . $file) ;
+ }
+ }
+}
+// close the directory
+closedir( $dir_hnd );
+
+
+
+
+
+
+
+
+
+
+/******************************************************************************
+*
+* Function: Read_Makernote_Tag
+*
+* Description: Attempts to decodes the Makernote tag supplied, returning the
+* new tag with the decoded information attached.
+*
+* Parameters: Makernote_Tag - the element of an EXIF array containing the
+* makernote, as returned from get_EXIF_JPEG
+* EXIF_Array - the entire EXIF array containing the
+* makernote, as returned from get_EXIF_JPEG, in
+* case more information is required for decoding
+* filehnd - an open file handle for the file containing the
+* makernote - does not have to be positioned at the
+* start of the makernote
+*
+*
+* Returns: Makernote_Tag - the Makernote_Tag from the parameters, but
+* modified to contain the decoded information
+*
+******************************************************************************/
+
+function Read_Makernote_Tag( $Makernote_Tag, $EXIF_Array, $filehnd )
+{
+
+ // Check if the Makernote is present but empty - this sometimes happens
+ if ( ( strlen( $Makernote_Tag['Data'] ) === 0 ) ||
+ ( is_string( $Makernote_Tag['Data'] ) && $Makernote_Tag['Data'] === str_repeat ( "\x00", strlen( $Makernote_Tag['Data'] )) ) )
+ {
+ // Modify the makernote to display that it is empty
+ $Makernote_Tag['Decoded Data'] = "Empty";
+ $Makernote_Tag['Makernote Type'] = "Empty";
+ $Makernote_Tag['Makernote Tags'] = "Empty";
+ $Makernote_Tag['Decoded'] = TRUE;
+
+ // Return the new makernote
+ return $Makernote_Tag;
+ }
+
+ // Check if the Make Field exists in the TIFF IFD
+ if ( array_key_exists ( 271, $EXIF_Array[0] ) )
+ {
+ // A Make tag exists in IFD0, collapse multiple strings (if any), and save result
+ $Make_Field = implode ( "\n", $EXIF_Array[0][271]['Data']);
+ }
+ else
+ {
+ // No Make field found
+ $Make_Field = "";
+ }
+
+ // Cycle through each of the "Read_Makernote_Tag" functions
+
+ foreach( $GLOBALS['Makernote_Function_Array']['Read_Makernote_Tag'] as $func )
+ {
+ // Run the current function, and save the result
+ $New_Makernote_Tag = $func( $Makernote_Tag, $EXIF_Array, $filehnd, $Make_Field );
+
+ // Check if a valid result was returned
+ if ( $New_Makernote_Tag !== FALSE )
+ {
+ // A valid result was returned - stop cycling
+ break;
+ }
+ }
+
+ // Check if a valid result was returned
+ if ( $New_Makernote_Tag === false )
+ {
+ // A valid result was NOT returned - construct a makernote tag representing this
+ $New_Makernote_Tag = $Makernote_Tag;
+ $New_Makernote_Tag['Decoded'] = FALSE;
+ $New_Makernote_Tag['Makernote Type'] = "Unknown Makernote";
+ }
+
+ // Return the new makernote tag
+ return $New_Makernote_Tag;
+
+}
+
+/******************************************************************************
+* End of Function: Read_Makernote_Tag
+******************************************************************************/
+
+
+
+
+
+
+
+
+
+/******************************************************************************
+*
+* Function: get_Makernote_Text_Value
+*
+* Description: Attempts to provide a text value for any makernote tag marked
+* as type special. Returns false no handler could be found to
+* process the tag
+*
+* Parameters: Exif_Tag - the element of an the Makernote array containing the
+* tag in question, as returned from Read_Makernote_Tag
+* Tag_Definitions_Name - The name of the Tag Definitions group
+* within the global array IFD_Tag_Definitions
+*
+*
+* Returns: output - the text value for the tag
+* FALSE - If no handler could be found to process this tag, or if
+* an error occured in decoding
+*
+******************************************************************************/
+
+function get_Makernote_Text_Value( $Tag, $Tag_Definitions_Name )
+{
+
+ // Cycle through each of the "get_Makernote_Text_Value" functions
+
+ foreach( $GLOBALS['Makernote_Function_Array']['get_Makernote_Text_Value'] as $func )
+ {
+ // Run the current function, and save the result
+ $Text_Val = $func( $Tag, $Tag_Definitions_Name );
+
+ // Check if a valid result was returned
+ if ( $Text_Val !== FALSE )
+ {
+ // valid result - return it
+ return $Text_Val;
+ }
+ }
+
+ // No Special tag handler found for this tag - return false
+ return FALSE;
+
+}
+
+
+/******************************************************************************
+* End of Function: get_Makernote_Text_Value
+******************************************************************************/
+
+
+
+
+
+
+
+
+/******************************************************************************
+*
+* Function: Interpret_Makernote_to_HTML
+*
+* Description: Attempts to interpret a makernote into html.
+*
+* Parameters: Makernote_Tag - the element of an EXIF array containing the
+* makernote, as returned from get_EXIF_JPEG
+* filename - the name of the JPEG file being processed ( used
+* by scripts which display embedded thumbnails)
+*
+*
+* Returns: output - the html representing the makernote
+*
+******************************************************************************/
+
+function Interpret_Makernote_to_HTML( $Makernote_tag, $filename )
+{
+
+ // Create a string to receive the HTML
+ $output_str = "";
+
+ // Check if the makernote tag is valid
+ if ( $Makernote_tag === FALSE )
+ {
+ // No makernote info - return
+ return $output_str;
+ }
+
+
+ // Check if the makernote has been marked as unknown
+ if ( $Makernote_tag['Makernote Type'] == "Unknown Makernote" )
+ {
+ // Makernote is unknown - return message
+ $output_str .= "<h4 class=\"EXIF_Makernote_Small_Heading\">Unknown Makernote Coding</h4>\n";
+ return $output_str;
+ }
+ else
+ {
+ // Makernote is known - add a heading to the output
+ $output_str .= "<p class=\"EXIF_Makernote_Text\">Makernote Coding: " . $Makernote_tag['Makernote Type'] . "</p>\n";
+ }
+
+ // Check if this is an empty makernote
+ if ( $Makernote_tag['Makernote Type'] == "Empty" )
+ {
+ // It is empty - don't try to interpret
+ return $output_str;
+ }
+
+ // Cycle through each of the "Interpret_Makernote_to_HTML" functions
+
+ foreach( $GLOBALS['Makernote_Function_Array']['Interpret_Makernote_to_HTML'] as $func )
+ {
+ // Run the current function, and save the result
+ $html_text = $func( $Makernote_tag, $filename );
+
+ // Check if a valid result was returned
+ if ( $html_text !== FALSE )
+ {
+ // valid result - return it
+ return $output_str . $html_text;
+ }
+ }
+
+ // No Interpreter function handled the makernote - return a message
+
+ $output_str .= "<h4 class=\"EXIF_Makernote_Small_Heading\">Could not Decode Makernote, it may be corrupted or empty</h4>\n";
+
+ return $output_str;
+
+
+}
+
+/******************************************************************************
+* End of Function: Interpret_Makernote_to_HTML
+******************************************************************************/
+
+
+
+?>