additional_plugins/serendipity_event_usergallery/JPEG_TOOLKIT/IPTC.php
Garvin Hicking 5731762a34 Added parameters to html_entity_decode() and htmlentities().
I did not use the wrapper method for those few occurences since it was too much work.
I'm sorry :-D
2014-11-29 12:18:56 +01:00

691 lines
35 KiB
PHP
Raw Blame History

<?php
/******************************************************************************
*
* Filename: IPTC.php
*
* Description: Provides functions for reading and writing IPTC-NAA Information
* Interchange Model metadata
*
* Author: Evan Hunter
*
* Date: 23/7/2004
*
* Project: PHP JPEG Metadata Toolkit
*
* Revision: 1.10
*
* Changes: 1.00 -> 1.01 : changed get_IPTC to return partial data when error occurs
* 1.01 -> 1.10 : changed put_IPTC to check if the incoming IPTC block is valid
* changed Interpret_IPTC_to_HTML, adding nl2br functions for each text field,
* so that multiline text displays properly
*
* 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
*
******************************************************************************/
// TODO: Not all of the IPTC fields have been tested properly
/******************************************************************************
*
* Function: get_IPTC
*
* Description: Extracts IPTC-NAA IIM data from the string provided, and returns
* the information as an array
*
* Parameters: Data_Str - the string containing the IPTC-NAA IIM records. Must
* be exact length of the IPTC-NAA IIM data.
*
* Returns: OutputArray - Array of IPTC-NAA IIM records
* FALSE - If an error occured in decoding
*
******************************************************************************/
function get_IPTC( $Data_Str )
{
// Initialise the start position
$pos = 0;
// Create the array to receive the data
$OutputArray = array( );
// Cycle through the IPTC records, decoding and storing them
while( $pos < strlen($Data_Str) )
{
// TODO - Extended Dataset record not supported
// Check if there is sufficient data for reading the record
if ( strlen( substr($Data_Str,$pos) ) < 5 )
{
// Not enough data left for a record - Probably corrupt data - ERROR
// Change: changed to return partial data as of revision 1.01
return $OutputArray;
}
// Unpack data from IPTC record:
// First byte - IPTC Tag Marker - always 28
// Second byte - IPTC Record Number
// Third byte - IPTC Dataset Number
// Fourth and fifth bytes - two byte size value
$iptc_raw = unpack( "CIPTC_Tag_Marker/CIPTC_Record_No/CIPTC_Dataset_No/nIPTC_Size", substr($Data_Str,$pos) );
// Skip position over the unpacked data
$pos += 5;
// Construct the IPTC type string eg 2:105
$iptctype = sprintf( "%01d:%02d", $iptc_raw['IPTC_Record_No'], $iptc_raw['IPTC_Dataset_No']);
// Check if there is sufficient data for reading the record contents
if ( strlen( substr( $Data_Str, $pos, $iptc_raw['IPTC_Size'] ) ) !== $iptc_raw['IPTC_Size'] )
{
// Not enough data left for the record content - Probably corrupt data - ERROR
// Change: changed to return partial data as of revision 1.01
return $OutputArray;
}
// Add the IPTC record to the output array
$OutputArray[] = array( "IPTC_Type" => $iptctype ,
"RecName" => $GLOBALS[ "IPTC_Entry_Names" ][ $iptctype ],
"RecDesc" => $GLOBALS[ "IPTC_Entry_Descriptions" ][ $iptctype ],
"RecData" => substr( $Data_Str, $pos, $iptc_raw['IPTC_Size'] ) );
// Skip over the IPTC record data
$pos += $iptc_raw['IPTC_Size'];
}
return $OutputArray;
}
/******************************************************************************
* End of Function: get_IPTC
******************************************************************************/
/******************************************************************************
*
* Function: put_IPTC
*
* Description: Encodes an array of IPTC-NAA records into a string encoded
* as IPTC-NAA IIM. (The reverse of get_IPTC)
*
* Parameters: new_IPTC_block - the IPTC-NAA array to be encoded. Should be
* the same format as that received from get_IPTC
*
* Returns: iptc_packed_data - IPTC-NAA IIM encoded string
*
******************************************************************************/
function put_IPTC( $new_IPTC_block )
{
// Check if the incoming IPTC block is valid
if ( $new_IPTC_block == FALSE )
{
// Invalid IPTC block - abort
return FALSE;
}
// Initialise the packed output data string
$iptc_packed_data = "";
// Cycle through each record in the new IPTC block
foreach ($new_IPTC_block as $record)
{
// Extract the Record Number and Dataset Number from the IPTC_Type field
list($IPTC_Record, $IPTC_Dataset) = sscanf( $record['IPTC_Type'], "%d:%d");
// Write the IPTC-NAA IIM Tag Marker, Record Number, Dataset Number and Data Size to the packed output data string
$iptc_packed_data .= pack( "CCCn", 28, $IPTC_Record, $IPTC_Dataset, strlen($record['RecData']) );
// Write the IPTC-NAA IIM Data to the packed output data string
$iptc_packed_data .= $record['RecData'];
}
// Return the IPTC-NAA IIM data
return $iptc_packed_data;
}
/******************************************************************************
* End of Function: put_IPTC
******************************************************************************/
/******************************************************************************
*
* Function: Interpret_IPTC_to_HTML
*
* Description: Generates html detailing the contents a IPTC-NAA IIM array
* which was retrieved with the get_IPTC function
*
* Parameters: IPTC_info - the IPTC-NAA IIM array,as read from get_IPTC
*
* Returns: OutputStr - A string containing the HTML
*
******************************************************************************/
function Interpret_IPTC_to_HTML( $IPTC_info )
{
// Create a string to receive the HTML
$output_str ="";
// Check if the IPTC
if ( $IPTC_info !== FALSE )
{
// Add Heading to HTML
$output_str .= "<h3 class=\"IPTC_Main_Heading\">IPTC-NAA Record</h3>\n";
// Add Table to HTML
$output_str .= "\n<table class=\"IPTC_Table\" border=1>\n";
// Cycle through each of the IPTC-NAA IIM records
foreach( $IPTC_info as $IPTC_Record )
{
// Check if the record is a known IPTC field
$Record_Name = $IPTC_Record['RecName'];
if ( $Record_Name == "" )
{
// Record is an unknown field - add message to HTML
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">Unknown IPTC field '". htmlentities( $IPTC_Record['IPTC_Type'], ENT_COMPAT, LANG_CHARSET ). "' :</td><td class=\"IPTC_Value_Cell\">" . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
}
else
{
// Record is a recognised IPTC field - Process it accordingly
switch ( $IPTC_Record['IPTC_Type'] )
{
case "1:00": // Envelope Record:Model Version
case "1:22": // Envelope Record:File Format Version
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">" . hexdec( bin2hex( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
break;
case "1:90": // Envelope Record:Coded Character Set
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Decoding not yet implemented<br>\n (Hex Data: " . bin2hex( $IPTC_Record['RecData'] ) .")</td></tr>\n";
break;
// TODO: Implement decoding of IPTC record 1:90
case "1:20": // Envelope Record:File Format
$formatno = hexdec( bin2hex( $IPTC_Record['RecData'] ) );
// Lookup file format from lookup-table
if ( array_key_exists( $formatno, $GLOBALS[ "IPTC_File Formats" ] ) )
{
// Entry was found in lookup table - add it to HTML
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">File Format</td><td class=\"IPTC_Value_Cell\">". $GLOBALS[ "IPTC_File Formats" ][$formatno] . "</td></tr>\n";
}
else
{
// No matching entry was found in lookup table - add message to html
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">File Format</td><td class=\"IPTC_Value_Cell\">Unknown File Format ($formatno)</td></tr>\n";
}
break;
case "2:00": // Application Record:Record Version
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">IPTC Version</td><td class=\"IPTC_Value_Cell\">" . hexdec( bin2hex( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
break;
case "2:42": // Application Record: Action Advised
// Looup Action
if ( $IPTC_Record['RecData'] == "01" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Kill</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "02" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Replace</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "03" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Append</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "04" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Reference</td></tr>\n";
}
else
{
// Unknown Action
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Unknown : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
}
break;
case "2:08": // Application Record:Editorial Update
if ( $IPTC_Record['RecData'] == "01" )
{
// Additional Language
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Additional language</td></tr>\n";
}
else
{
// Unknown Value
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Unknown : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
}
break;
case "2:30": // Application Record:Release Date
case "2:37": // Application Record:Expiration Date
case "2:47": // Application Record:Reference Date
case "2:55": // Application Record:Date Created
case "2:62": // Application Record:Digital Creation Date
case "1:70": // Envelope Record:Date Sent
$date_array = unpack( "a4Year/a2Month/A2Day", $IPTC_Record['RecData'] );
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">" . nl2br( HTML_UTF8_Escape( $date_array['Day'] . "/" . $date_array['Month'] . "/" . $date_array['Year'] ) ) ."</td></tr>\n";
break;
case "2:35": // Application Record:Release Time
case "2:38": // Application Record:Expiration Time
case "2:60": // Application Record:Time Created
case "2:63": // Application Record:Digital Creation Time
case "1:80": // Envelope Record:Time Sent
$time_array = unpack( "a2Hour/a2Minute/A2Second/APlusMinus/A4Timezone", $IPTC_Record['RecData'] );
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">" . nl2br( HTML_UTF8_Escape( $time_array['Hour'] . ":" . $time_array['Minute'] . ":" . $time_array['Second'] . " ". $time_array['PlusMinus'] . $time_array['Timezone'] ) ) ."</td></tr>\n";
break;
case "2:75": // Application Record:Object Cycle
// Lookup Value
if ( $IPTC_Record['RecData'] == "a" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Morning</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "p" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Evening</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "b" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Both Morning and Evening</td></tr>\n";
}
else
{
// Unknown Value
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Unknown : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
}
break;
case "2:125": // Application Record:Rasterised Caption
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">460x128 pixel black and white caption image</td></tr>\n";
break;
// TODO: Display Rasterised Caption for IPTC record 2:125
case "2:130": // Application Record:Image Type
// Lookup Number of Components
if ( $IPTC_Record['RecData'][0] == "0" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">No Objectdata";
}
elseif ( $IPTC_Record['RecData'][0] == "9" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Supplemental objects related to other objectdata";
}
else
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Number of Colour Components : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'][0] ) );
}
// Lookup current objectdata colour
if ( $GLOBALS['ImageType_Names'][ $IPTC_Record['RecData'][1] ] == "" )
{
$output_str .= ", Unknown : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'][1] ) );
}
else
{
$output_str .= ", " . nl2br( HTML_UTF8_Escape( $GLOBALS['ImageType_Names'][ $IPTC_Record['RecData'][1] ] ) );
}
$output_str .= "</td></tr>\n";
break;
case "2:131": // Application Record:Image Orientation
// Lookup value
if ( $IPTC_Record['RecData'] == "L" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Landscape</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "P" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Portrait</td></tr>\n";
}
elseif ( $IPTC_Record['RecData'] == "S" )
{
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Square</td></tr>\n";
}
else
{
// Unknown Orientation Value
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">Unknown : " . nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
}
break;
default: // All other records
$output_str .= "<tr class=\"IPTC_Table_Row\"><td class=\"IPTC_Caption_Cell\">$Record_Name</td><td class=\"IPTC_Value_Cell\">" .nl2br( HTML_UTF8_Escape( $IPTC_Record['RecData'] ) ) ."</td></tr>\n";
break;
}
}
}
// Add Table End to HTML
$output_str .= "</table><br>\n";
}
// Return HTML
return $output_str;
}
/******************************************************************************
* End of Function: Interpret_IPTC_to_HTML
******************************************************************************/
/******************************************************************************
* Global Variable: IPTC_Entry_Names
*
* Contents: The names of the IPTC-NAA IIM fields
*
******************************************************************************/
$GLOBALS[ "IPTC_Entry_Names" ] = array(
// Envelope Record
"1:00" => "Model Version",
"1:05" => "Destination",
"1:20" => "File Format",
"1:22" => "File Format Version",
"1:30" => "Service Identifier",
"1:40" => "Envelope Number",
"1:50" => "Product ID",
"1:60" => "Envelope Priority",
"1:70" => "Date Sent",
"1:80" => "Time Sent",
"1:90" => "Coded Character Set",
"1:100" => "UNO (Unique Name of Object)",
"1:120" => "ARM Identifier",
"1:122" => "ARM Version",
// Application Record
"2:00" => "Record Version",
"2:03" => "Object Type Reference",
"2:05" => "Object Name (Title)",
"2:07" => "Edit Status",
"2:08" => "Editorial Update",
"2:10" => "Urgency",
"2:12" => "Subject Reference",
"2:15" => "Category",
"2:20" => "Supplemental Category",
"2:22" => "Fixture Identifier",
"2:25" => "Keywords",
"2:26" => "Content Location Code",
"2:27" => "Content Location Name",
"2:30" => "Release Date",
"2:35" => "Release Time",
"2:37" => "Expiration Date",
"2:35" => "Expiration Time",
"2:40" => "Special Instructions",
"2:42" => "Action Advised",
"2:45" => "Reference Service",
"2:47" => "Reference Date",
"2:50" => "Reference Number",
"2:55" => "Date Created",
"2:60" => "Time Created",
"2:62" => "Digital Creation Date",
"2:63" => "Digital Creation Time",
"2:65" => "Originating Program",
"2:70" => "Program Version",
"2:75" => "Object Cycle",
"2:80" => "By-Line (Author)",
"2:85" => "By-Line Title (Author Position) [Not used in Photoshop 7]",
"2:90" => "City",
"2:92" => "Sub-Location",
"2:95" => "Province/State",
"2:100" => "Country/Primary Location Code",
"2:101" => "Country/Primary Location Name",
"2:103" => "Original Transmission Reference",
"2:105" => "Headline",
"2:110" => "Credit",
"2:115" => "Source",
"2:116" => "Copyright Notice",
"2:118" => "Contact",
"2:120" => "Caption/Abstract",
"2:122" => "Caption Writer/Editor",
"2:125" => "Rasterized Caption",
"2:130" => "Image Type",
"2:131" => "Image Orientation",
"2:135" => "Language Identifier",
"2:150" => "Audio Type",
"2:151" => "Audio Sampling Rate",
"2:152" => "Audio Sampling Resolution",
"2:153" => "Audio Duration",
"2:154" => "Audio Outcue",
"2:200" => "ObjectData Preview File Format",
"2:201" => "ObjectData Preview File Format Version",
"2:202" => "ObjectData Preview Data",
// Pre-ObjectData Descriptor Record
"7:10" => "Size Mode",
"7:20" => "Max Subfile Size",
"7:90" => "ObjectData Size Announced",
"7:95" => "Maximum ObjectData Size",
// ObjectData Record
"8:10" => "Subfile",
// Post ObjectData Descriptor Record
"9:10" => "Confirmed ObjectData Size"
);
/******************************************************************************
* End of Global Variable: IPTC_Entry_Names
******************************************************************************/
/******************************************************************************
* Global Variable: IPTC_Entry_Descriptions
*
* Contents: The Descriptions of the IPTC-NAA IIM fields
*
******************************************************************************/
$GLOBALS[ "IPTC_Entry_Descriptions" ] = array(
// Envelope Record
"1:00" => "2 byte binary version number",
"1:05" => "Max 1024 characters of Destination",
"1:20" => "2 byte binary file format number, see IPTC-NAA V4 Appendix A",
"1:22" => "Binary version number of file format",
"1:30" => "Max 10 characters of Service Identifier",
"1:40" => "8 Character Envelope Number",
"1:50" => "Product ID - Max 32 characters",
"1:60" => "Envelope Priority - 1 numeric characters",
"1:70" => "Date Sent - 8 numeric characters CCYYMMDD",
"1:80" => "Time Sent - 11 characters HHMMSS<53>HHMM",
"1:90" => "Coded Character Set - Max 32 characters",
"1:100" => "UNO (Unique Name of Object) - 14 to 80 characters",
"1:120" => "ARM Identifier - 2 byte binary number",
"1:122" => "ARM Version - 2 byte binary number",
// Application Record
"2:00" => "Record Version - 2 byte binary number",
"2:03" => "Object Type Reference - 3 plus 0 to 64 Characters",
"2:05" => "Object Name (Title) - Max 64 characters",
"2:07" => "Edit Status - Max 64 characters",
"2:08" => "Editorial Update - 2 numeric characters",
"2:10" => "Urgency - 1 numeric character",
"2:12" => "Subject Reference - 13 to 236 characters",
"2:15" => "Category - Max 3 characters",
"2:20" => "Supplemental Category - Max 32 characters",
"2:22" => "Fixture Identifier - Max 32 characters",
"2:25" => "Keywords - Max 64 characters",
"2:26" => "Content Location Code - 3 characters",
"2:27" => "Content Location Name - Max 64 characters",
"2:30" => "Release Date - 8 numeric characters CCYYMMDD",
"2:35" => "Release Time - 11 characters HHMMSS<53>HHMM",
"2:37" => "Expiration Date - 8 numeric characters CCYYMMDD",
"2:35" => "Expiration Time - 11 characters HHMMSS<53>HHMM",
"2:40" => "Special Instructions - Max 256 Characters",
"2:42" => "Action Advised - 2 numeric characters",
"2:45" => "Reference Service - Max 10 characters",
"2:47" => "Reference Date - 8 numeric characters CCYYMMDD",
"2:50" => "Reference Number - 8 characters",
"2:55" => "Date Created - 8 numeric characters CCYYMMDD",
"2:60" => "Time Created - 11 characters HHMMSS<53>HHMM",
"2:62" => "Digital Creation Date - 8 numeric characters CCYYMMDD",
"2:63" => "Digital Creation Time - 11 characters HHMMSS<53>HHMM",
"2:65" => "Originating Program - Max 32 characters",
"2:70" => "Program Version - Max 10 characters",
"2:75" => "Object Cycle - 1 character",
"2:80" => "By-Line (Author) - Max 32 Characters",
"2:85" => "By-Line Title (Author Position) - Max 32 characters",
"2:90" => "City - Max 32 Characters",
"2:92" => "Sub-Location - Max 32 characters",
"2:95" => "Province/State - Max 32 Characters",
"2:100" => "Country/Primary Location Code - 3 alphabetic characters",
"2:101" => "Country/Primary Location Name - Max 64 characters",
"2:103" => "Original Transmission Reference - Max 32 characters",
"2:105" => "Headline - Max 256 Characters",
"2:110" => "Credit - Max 32 Characters",
"2:115" => "Source - Max 32 Characters",
"2:116" => "Copyright Notice - Max 128 Characters",
"2:118" => "Contact - Max 128 characters",
"2:120" => "Caption/Abstract - Max 2000 Characters",
"2:122" => "Caption Writer/Editor - Max 32 Characters",
"2:125" => "Rasterized Caption - 7360 bytes, 1 bit per pixel, 460x128pixel image",
"2:130" => "Image Type - 2 characters",
"2:131" => "Image Orientation - 1 alphabetic character",
"2:135" => "Language Identifier - 2 or 3 aphabetic characters",
"2:150" => "Audio Type - 2 characters",
"2:151" => "Audio Sampling Rate - 6 numeric characters",
"2:152" => "Audio Sampling Resolution - 2 numeric characters",
"2:153" => "Audio Duration - 6 numeric characters",
"2:154" => "Audio Outcue - Max 64 characters",
"2:200" => "ObjectData Preview File Format - 2 byte binary number",
"2:201" => "ObjectData Preview File Format Version - 2 byte binary number",
"2:202" => "ObjectData Preview Data - Max 256000 binary bytes",
// Pre-ObjectData Descriptor Record
"7:10" => "Size Mode - 1 numeric character",
"7:20" => "Max Subfile Size",
"7:90" => "ObjectData Size Announced",
"7:95" => "Maximum ObjectData Size",
// ObjectData Record
"8:10" => "Subfile",
// Post ObjectData Descriptor Record
"9:10" => "Confirmed ObjectData Size"
);
/******************************************************************************
* End of Global Variable: IPTC_Entry_Descriptions
******************************************************************************/
/******************************************************************************
* Global Variable: IPTC_File Formats
*
* Contents: The names of the IPTC-NAA IIM File Formats for field 1:20
*
******************************************************************************/
$GLOBALS[ "IPTC_File Formats" ] = array(
00 => "No ObjectData",
01 => "IPTC-NAA Digital Newsphoto Parameter Record",
02 => "IPTC7901 Recommended Message Format",
03 => "Tagged Image File Format (Adobe/Aldus Image data)",
04 => "Illustrator (Adobe Graphics data)",
05 => "AppleSingle (Apple Computer Inc)",
06 => "NAA 89-3 (ANPA 1312)",
07 => "MacBinary II",
08 => "IPTC Unstructured Character Oriented File Format (UCOFF)",
09 => "United Press International ANPA 1312 variant",
10 => "United Press International Down-Load Message",
11 => "JPEG File Interchange (JFIF)",
12 => "Photo-CD Image-Pac (Eastman Kodak)",
13 => "Microsoft Bit Mapped Graphics File [*.BMP]",
14 => "Digital Audio File [*.WAV] (Microsoft & Creative Labs)",
15 => "Audio plus Moving Video [*.AVI] (Microsoft)",
16 => "PC DOS/Windows Executable Files [*.COM][*.EXE]",
17 => "Compressed Binary File [*.ZIP] (PKWare Inc)",
18 => "Audio Interchange File Format AIFF (Apple Computer Inc)",
19 => "RIFF Wave (Microsoft Corporation)",
20 => "Freehand (Macromedia/Aldus)",
21 => "Hypertext Markup Language - HTML (The Internet Society)",
22 => "MPEG 2 Audio Layer 2 (Musicom), ISO/IEC",
23 => "MPEG 2 Audio Layer 3, ISO/IEC",
24 => "Portable Document File (*.PDF) Adobe",
25 => "News Industry Text Format (NITF)",
26 => "Tape Archive (*.TAR)",
27 => "Tidningarnas Telegrambyr<79> NITF version (TTNITF DTD)",
28 => "Ritzaus Bureau NITF version (RBNITF DTD)",
29 => "Corel Draw [*.CDR]"
);
/******************************************************************************
* End of Global Variable: IPTC_File Formats
******************************************************************************/
/******************************************************************************
* Global Variable: ImageType_Names
*
* Contents: The names of the colour components for IPTC-NAA IIM field 2:130
*
******************************************************************************/
$GLOBALS['ImageType_Names'] = array( "M" => "Monochrome",
"Y" => "Yellow Component",
"M" => "Magenta Component",
"C" => "Cyan Component",
"K" => "Black Component",
"R" => "Red Component",
"G" => "Green Component",
"B" => "Blue Component",
"T" => "Text Only",
"F" => "Full colour composite, frame sequential",
"L" => "Full colour composite, line sequential",
"P" => "Full colour composite, pixel sequential",
"S" => "Full colour composite, special interleaving" );
/******************************************************************************
* End of Global Variable: ImageType_Names
******************************************************************************/
?>