📄 exif_makernote.php
字号:
<?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 arrayinclude_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 directorywhile ( ( $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 directoryclosedir( $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 ) || ( $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******************************************************************************/?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -