cvs: php4 /ext/exif exif.c test.txt /ext/exif/tests 001.phpt

From: Date: Tue, 12 Mar 2002 16:43:30 +0000
Subject: cvs: php4 /ext/exif exif.c test.txt /ext/exif/tests 001.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-10023@lists.php.net to get a copy of this message
helly Tue Mar 12 11:43:30 2002 EDT Modified files: /php4/ext/exif/tests 001.phpt /php4/ext/exif exif.c test.txt Log: -usability -tests

Index: php4/ext/exif/tests/001.phpt diff -u php4/ext/exif/tests/001.phpt:1.3 php4/ext/exif/tests/001.phpt:1.4 --- php4/ext/exif/tests/001.phpt:1.3 Tue Mar 12 07:42:45 2002 +++ php4/ext/exif/tests/001.phpt Tue Mar 12 11:43:28 2002 @@ -23,4 +23,4 @@ echo $accept; ?> --EXPECT-- -ArrayFitest2.jpgFi1015448798Fi1240Fi2SeCOMPUTED, ANY_TAG, IFD0, THUMBNAIL, COMMENTArrayCoPhoto (c) M.BoergerCoEdited by M.Boergehtwidth="1" height="1"He1Wi1Is1UsExif test image.UsASCIIArrayCoPhoto (c) M.BoergerUsASCIIArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3end \ No newline at end of file +ArrayFitest2.jpgFi1015448798Fi1240Fi2SeANY_TAG, IFD0, THUMBNAIL, COMMENTArrayhtwidth="1" height="1"He1Wi1Is1UsExif test image.UsASCIICoPhoto (c) M.Boerger, Edited by M.Boerger.CoPhoto (c) M.BoergerCoPhoto (c) M.BoergerArrayCoPhoto (c) M.BoergerUsASCIIArrayJP134JP523Array0Comment #1.1Comment #2.2Comment #3end \ No newline at end of file Index: php4/ext/exif/exif.c diff -u php4/ext/exif/exif.c:1.59 php4/ext/exif/exif.c:1.60 --- php4/ext/exif/exif.c:1.59 Tue Mar 12 08:49:40 2002 +++ php4/ext/exif/exif.c Tue Mar 12 11:43:29 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: exif.c,v 1.59 2002/03/12 13:49:40 helly Exp $ */ +/* $Id: exif.c,v 1.60 2002/03/12 16:43:29 helly Exp $ */ /* ToDos * @@ -67,7 +67,7 @@ * while extending the module as it shows if you are at the right position. * You are always considered to have a copy of TIFF6.0 and EXIF2.10 standard. */ -#define EXIF_DEBUG +#undef EXIF_DEBUG #include "php_exif.h" #include <math.h> @@ -99,7 +99,7 @@ }; /* }}} */ -#define EXIF_VERSION "1.3 $Id: exif.c,v 1.59 2002/03/12 13:49:40 helly Exp $" +#define EXIF_VERSION "1.3 $Id: exif.c,v 1.60 2002/03/12 16:43:29 helly Exp $" PHP_MINFO_FUNCTION(exif); @@ -130,8 +130,8 @@ REGISTER_LONG_CONSTANT("IMAGETYPE_TIFF_MM", IMAGE_FILETYPE_TIFF_MM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMAGETYPE_JPC", IMAGE_FILETYPE_JPC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMAGETYPE_JP2", IMAGE_FILETYPE_JP2, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMAGETYPE_JPX", IMAGE_FILETYPE_JPX, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IMAGETYPE_JB2", IMAGE_FILETYPE_JB2, CONST_CS | CONST_PERSISTENT); return SUCCESS; } /* }}} */ @@ -907,6 +907,9 @@ char *UserComment; char *UserCommentEncoding; + char *Copyright; + char *CopyrightPhotographer; + char *CopyrightEditor; thumbnail_data Thumbnail; /* other */ @@ -1140,7 +1143,7 @@ /* }}} */ /* {{{ exif_iif_add_int - Add a tag from IFD to image_info + Add an int value to image_info */ void exif_iif_add_int( image_info_type *image_info, int section_index, char *name, int value) { @@ -1169,6 +1172,49 @@ } /* }}} */ +/* {{{ exif_iif_add_str + Add a string value to image_info MUST BE NUL TERMINATED +*/ +void exif_iif_add_str( image_info_type *image_info, int section_index, char *name, char *value, ...) +{ + image_info_data *info_data; + image_info_data *list; + char tmp[1024]; + va_list arglist; + + va_start( arglist, value ); + if ( value) vsnprintf( tmp, sizeof(tmp), value, arglist); + va_end( arglist); + + if ( value) { + + list = erealloc(image_info->info_list[section_index].list,(image_info->info_list[section_index].count+1)*sizeof(image_info_data)); + if ( !list) { + EXIF_ERRLOG_EALLOC + return; + } + image_info->info_list[section_index].list = list; + + info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; + info_data->tag = TAG_NONE; + info_data->format = TAG_FMT_STRING; + info_data->length = 1; + info_data->name = estrdup(name); + if ( !info_data->name) { + EXIF_ERRLOG_EALLOC + return; + } + info_data->value.s = estrdup(tmp); + if ( !info_data->value.s) { + EXIF_ERRLOG_EALLOC + return; + } + image_info->sections_found |= 1<<section_index; + image_info->info_list[section_index].count++; + } +} +/* }}} */ + /* {{{ exif_iif_free Free memory allocated for image_info */ @@ -1754,7 +1800,6 @@ new_size += byte_count; } } - php_error(E_NOTICE,"thumbnail: writing with value offset: 0x%04X", new_value); new_move = new_size; new_data = erealloc(ImageInfo->Thumbnail.data,ImageInfo->Thumbnail.size+new_size); if (!ImageInfo->Thumbnail.data) { @@ -1774,7 +1819,6 @@ memmove( new_data, "II\x2a\x00\x08\x00\x00\x00", 8); } new_data += 8; - php_error(E_NOTICE,"thumbnail: writing directory size"); php_ifd_set16u( new_data, info_list->count, ImageInfo->motorola_intel); new_data += 2; for (i=0; i<info_list->count; i++) { @@ -1809,7 +1853,6 @@ #endif memmove( ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count); new_value += byte_count; - php_error(E_NOTICE,"thumbnail: components: \n%s\n", exif_char_dump(value_ptr,byte_count,1)); } efree(value_ptr); } @@ -1852,10 +1895,9 @@ } /* }}} */ -/* {{{ exif_process_string_raw - * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ -#ifdef EXIF_DEBUG -static int exif_process_string_raw(char **result,char *value,size_t byte_count) { +/* {{{ exif_process_undefined + * Copy a string/buffer in Exif header to a character string and return length of allocated buffer if any. */ +static int exif_process_undefined(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we have to copy NUL * chars up to byte_count, we also have to add a single NUL character to * force end of string. @@ -1871,11 +1913,11 @@ } return 0; } -#endif /* }}} */ /* {{{ exif_process_string - * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ + * Copy a string in Exif header to a character string and return length of allocated buffer if any. + * In contrast to exif_process_undefined this function does allways return a string buffer */ static int exif_process_string(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we cannot use strlen to * determin length of string and we cannot use strlcpy with len=byte_count+1 @@ -1885,14 +1927,14 @@ * estrdup would sometimes allocate more memory and does not return length */ if ((byte_count=php_strnlen(value,byte_count)) > 0) { - (*result) = estrndup(value,byte_count); - if ( !*result) { - EXIF_ERRLOG_EALLOC - return 0; - } - return byte_count+1; + return exif_process_undefined(result,value,byte_count); } - return 0; + (*result) = estrndup("",1); /* force empty string */ + if ( !*result) { + EXIF_ERRLOG_EALLOC + return 0; + } + return byte_count+1; } /* }}} */ @@ -2077,14 +2119,26 @@ } else { switch(tag) { case TAG_COPYRIGHT: + /* check for "<photographer> NUL <editor> NUL" */ if (byte_count>1 && (l=php_strnlen(value_ptr,byte_count)) > 0) { if ( l<byte_count-1) { /* When there are any characters after the first NUL */ - exif_iif_add_tag( ImageInfo, SECTION_COMPUTED, "Copyright.Photographer", TAG_COPYRIGHT, TAG_FMT_STRING, l, value_ptr); - exif_iif_add_tag( ImageInfo, SECTION_COMPUTED, "Copyright.Editor", TAG_COPYRIGHT, TAG_FMT_STRING, byte_count-l-1, value_ptr+l+1); + ImageInfo->CopyrightPhotographer = estrdup( value_ptr); + ImageInfo->CopyrightEditor = estrdup( value_ptr); + ImageInfo->Copyright = emalloc(byte_count+3); + if ( !ImageInfo->Copyright) { + EXIF_ERRLOG_EALLOC + } else { + sprintf( ImageInfo->Copyright, "%s, %s", value_ptr, value_ptr+l+1); + } + /* format = TAG_FMT_UNDEFINED; this musn't be ASCII */ + /* but we are not supposed to change this */ + /* keep in mind that image_info does not store editor value */ #ifdef EXIF_DEBUG php_error(E_NOTICE,"added copyrights: %s, %s", value_ptr, value_ptr+l+1); #endif + } else { + ImageInfo->Copyright = estrdup(value_ptr); } } break; @@ -2509,6 +2563,10 @@ size_t length=2, pos=0; jpeg_sof_info sof_info; + if ( !data) + { + return FALSE; /* nothing to do here */ + } if ( memcmp(data,"\xFF\xD8\xFF",3)) { if ( !ImageInfo->Thumbnail.width && !ImageInfo->Thumbnail.height) @@ -2853,10 +2911,13 @@ { int i; - if (ImageInfo->FileName) efree(ImageInfo->FileName); - if (ImageInfo->UserComment) efree(ImageInfo->UserComment); - if (ImageInfo->UserCommentEncoding) efree(ImageInfo->UserCommentEncoding); - if (ImageInfo->Thumbnail.data) efree(ImageInfo->Thumbnail.data); + if (ImageInfo->FileName) efree(ImageInfo->FileName); + if (ImageInfo->UserComment) efree(ImageInfo->UserComment); + if (ImageInfo->UserCommentEncoding) efree(ImageInfo->UserCommentEncoding); + if (ImageInfo->Copyright) efree(ImageInfo->Copyright); + if (ImageInfo->CopyrightPhotographer) efree(ImageInfo->CopyrightPhotographer); + if (ImageInfo->CopyrightEditor) efree(ImageInfo->CopyrightEditor); + if (ImageInfo->Thumbnail.data) efree(ImageInfo->Thumbnail.data); for (i=0; i<SECTION_COUNT; i++) { exif_iif_free( ImageInfo, i); } @@ -2911,7 +2972,7 @@ PHP_FUNCTION(exif_read_data) { pval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, **p_read_all; - int i, len, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0; + int i, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0; image_info_type ImageInfo; char tmp[64], *sections_str, *s; @@ -2991,71 +3052,72 @@ #endif /* now we can add our information */ - exif_iif_add_tag( &ImageInfo, SECTION_FILE, "FileName", TAG_NONE, TAG_FMT_STRING, strlen(ImageInfo.FileName), ImageInfo.FileName); + exif_iif_add_str( &ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName); exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileDateTime", ImageInfo.FileDateTime); exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileSize", ImageInfo.FileSize); exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType); - if ( sections_str) exif_iif_add_tag( &ImageInfo, SECTION_FILE, "SectionsFound", TAG_NONE, TAG_FMT_STRING, strlen(sections_str), sections_str); + exif_iif_add_str( &ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE"); #ifdef EXIF_DEBUG php_error(E_NOTICE,"generate section COMPUTED"); #endif if (ImageInfo.Width>0 && ImageInfo.Height>0) { - sprintf(tmp, "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "html", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "html", "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Height", ImageInfo.Height); exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Width", ImageInfo.Width); } exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "IsColor", ImageInfo.IsColor); if (ImageInfo.FocalLength) { - sprintf(tmp, "%4.1fmm", ImageInfo.FocalLength); - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "FocalLength", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "FocalLength", "%4.1fmm", ImageInfo.FocalLength); if(ImageInfo.CCDWidth) { - sprintf(tmp, "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5)); - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "35mmFocalLength", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "35mmFocalLength", "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5)); } } if(ImageInfo.CCDWidth) { - sprintf(tmp, "%dmm", (int)ImageInfo.CCDWidth); - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "CCDWidth", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "CCDWidth", "%dmm", (int)ImageInfo.CCDWidth); } if(ImageInfo.ExposureTime>0) { if(ImageInfo.ExposureTime <= 0.5) { - sprintf(tmp, "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime)); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3f s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime)); } else { - sprintf(tmp, "%0.3f s", ImageInfo.ExposureTime); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "ExposureTime", "%0.3f s", ImageInfo.ExposureTime); } - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "ExposureTime", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if(ImageInfo.ApertureFNumber) { - sprintf(tmp, "f/%.1f", ImageInfo.ApertureFNumber); - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "ApertureFNumber", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "ApertureFNumber", "f/%.1f", ImageInfo.ApertureFNumber); } if(ImageInfo.Distance) { if(ImageInfo.Distance<0) { - sprintf(tmp,"%s","Infinite"); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "FocusDistance", "Infinite"); } else { - sprintf(tmp, "%0.2fm", ImageInfo.Distance); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "FocusDistance", "%0.2fm", ImageInfo.Distance); } - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "FocusDistance", TAG_NONE, TAG_FMT_STRING, strlen(tmp), tmp); } if (ImageInfo.UserComment) { - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "UserComment", TAG_NONE, TAG_FMT_STRING, strlen(ImageInfo.UserComment), ImageInfo.UserComment); - if ( ImageInfo.UserCommentEncoding && (len=strlen(ImageInfo.UserCommentEncoding))) { - exif_iif_add_tag( &ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", TAG_NONE, TAG_FMT_STRING, len, ImageInfo.UserCommentEncoding); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "UserComment", ImageInfo.UserComment); + if ( ImageInfo.UserCommentEncoding && strlen(ImageInfo.UserCommentEncoding)) { + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", ImageInfo.UserCommentEncoding); } } + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "Copyright", ImageInfo.Copyright); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "Copyright.Photographer", ImageInfo.CopyrightPhotographer); + exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "Copyright.Editor", ImageInfo.CopyrightEditor); + if ( ImageInfo.Thumbnail.size) { if ( read_thumbnail) { + /* not exif_iif_add_str : this is a buffer */ exif_iif_add_tag( &ImageInfo, SECTION_THUMBNAIL, "THUMBNAIL", TAG_NONE, TAG_FMT_UNDEFINED, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.data); } if ( !ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) { + /* try to evaluate if thumbnail data is present */ exif_scan_thumbnail( &ImageInfo); } - exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Thumbnail.Height", ImageInfo.Thumbnail.height); - exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Thumbnail.Width", ImageInfo.Thumbnail.width); + if ( ImageInfo.Thumbnail.width && ImageInfo.Thumbnail.height) { + exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Thumbnail.Height", ImageInfo.Thumbnail.height); + exif_iif_add_int( &ImageInfo, SECTION_COMPUTED, "Thumbnail.Width", ImageInfo.Thumbnail.width); + } } if ( sections_str) efree(sections_str); @@ -3133,7 +3195,10 @@ ZVAL_STRINGL( return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, 1); if ( arg_c == 3) { - exif_scan_thumbnail( &ImageInfo); + if ( !ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) + { + exif_scan_thumbnail( &ImageInfo); + } ZVAL_LONG( *p_width, ImageInfo.Thumbnail.width); ZVAL_LONG( *p_height, ImageInfo.Thumbnail.height); } Index: php4/ext/exif/test.txt diff -u php4/ext/exif/test.txt:1.7 php4/ext/exif/test.txt:1.8 --- php4/ext/exif/test.txt:1.7 Tue Mar 12 01:14:30 2002 +++ php4/ext/exif/test.txt Tue Mar 12 11:43:29 2002 @@ -4,7 +4,7 @@ * * (c) Marcus Boerger, 2002 * - * $Id: test.txt,v 1.7 2002/03/12 06:14:30 helly Exp $ + * $Id: test.txt,v 1.8 2002/03/12 16:43:29 helly Exp $ * * Rename the file to test.php and read the instructions. If the * script cannot be executed or does not generate any output check @@ -32,6 +32,11 @@ die(); } +if ( !defined('IMAGETYPE_GIF')) define('IMAGETYPE_GIF',1); +if ( !defined('IMAGETYPE_JPEG')) define('IMAGETYPE_JPEG',2); +if ( !defined('IMAGETYPE_TIFF_II')) define('IMAGETYPE_TIFF_II',7); +if ( !defined('IMAGETYPE_TIFF_MM')) define('IMAGETYPE_TIFF_MM',8); + $possible = array(); /****************************************************************************/ @@ -54,6 +59,8 @@ // private to function search_file() function _search_file($root,&$possible,$path='') { $sub = array(); + $cnt = 0; + $type= false; //error_log("search_file($root,$path)",0); if ($dir = @opendir($root.$path.'/')) { @@ -62,16 +69,26 @@ //error_log("search_file($root$path):$type=$found",0); switch( $type) { case 'file': - $pos = strpos($found,'.'); - if ( $pos !== false - && ( strtolower(substr($found,$pos+1))=='jpg' - || strtolower(substr($found,$pos+1))=='tif' - || strtolower(substr($found,$pos+1))=='gif' - ) - ) + $pos = strrpos($found,'.'); + if ( function_exists('exif_imagetype')) { + $type = exif_imagetype($root.$path.'/'.$found); + } else { + if ( $pos!==false) { + $type = GetImageSize($root.$path.'/'.$found); + if ( is_array($type)) { + $type = $type[2]; + } else { + $type = false; + } + } else $type = false; + } + if ( $type!==false) { - $possible[] = $root.$path.'/'.$found; + $possible[] = array('file'=>$root.$path.'/'.$found, 'type'=>$type); //error_log("search_file($root$path) add:$path/$found",0); + if ( ($cnt=count($possible)) % 100 == 0) { + error_log("exif test page - counting files: $cnt",0); + } } break; case 'dir': @@ -94,10 +111,12 @@ // Searches for $file in document tree. The path is ignored. // function search_file() { - global $argv; + global $argc, $argv; $possible = array(); - if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) { + if ( $argc > 1) { + $path = $argv[1]; + } else if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) { $path = $_SERVER['SCRIPT_FILENAME']; //error_log("SCRIPT_FILENAME($path)",0); } else { @@ -105,8 +124,10 @@ //error_log("argv($path)",0); } if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p); - if ( ($p=strrpos($path,'/')) < strlen($path)-1) $path = substr($path,0,$p); + if ( ($p=strrpos($path,'/')) /*< strlen($path)-1*/) $path = substr($path,0,$p); + error_log("exif test page - counting files in $path"); _search_file($path,$possible); + error_log("exif test page - counting files: ".count($possible)." done.",0); return $possible; } @@ -115,10 +136,15 @@ // // Searches for $file in document tree. The path is ignored. // -function AddInfo($Name,$Value) { +function AddInfo($Name,$Value,$highlight=0) { if (is_array($Value)) $Value = 'Array: ('.join(',',$Value).')'; $Value = nl2br($Value); - return "<tr><td>$Name</td><td>$Value&nbsp;</td></tr>\n"; + if ( $highlight) { + $Name = "<th>$Name</th>"; + } else { + $Name = "<td>$Name</td>"; + } + return "<tr>$Name<td>$Value&nbsp;</td></tr>\n"; } $possible = search_file(); @@ -151,7 +177,7 @@ </head> <body> <h1><?=$title ?></h1> -<h2>(c) Marcus Boerger, 2002</h2> +<h2>(c) Marcus B&ouml;rger, 2002</h2> </p> <p> Images taken from <a href="http://www.exif.org">www.exif.org</a>, @@ -222,62 +248,115 @@ <h2>function exif_read_data for <?=count($possible)?> images</h2> <?php +$check_getimagesize = false; +$check_exif_thumbnail = true; +$check_exif_read_data = false; +$fast_output = false; if (function_exists('exif_read_data')) { $num = 0; - $tab1 = "<table border='1' cellspacing='0' cellpadding='3' summary='function results'>\n"; + echo "<table border='1' cellspacing='0' cellpadding='3' summary='function results'>\n"; $tab2 = "";//"<table border='1' cellspacing='0' cellpadding='3' summary='EXIF information'>\n"; + $types = array('','GIF','JPEG','PNG','SWF','PSD','BMP','TIFF_II','TIFF_MM','JPC','JP2','JPX','JB2'); foreach($possible as $idx => $file) { - $num++; + $type = $file['type']; + $file = $file['file']; + if ( !((++$num)%100)) error_log("exif test page - checking files: $num",0); $error = ''; - $len = 4; - $tab1 .= "<tr><td rowspan='3' valign='top'>$num</td><th colspan='2'>$file</th></tr>\n"; - $size = GetImageSize($file); - $error = error_msg();// clear message - if ( $size === false) { - $getimagesize = '<b style="color:red">GetImageSize returned false</b><br>'.$error; - } else { - $getimagesize = "[ $size[0], $size[1], $size[2], $size[3] ]"; + $len = 2; + $rows = 1 + + ($check_getimagesize ? 1 : 0) + + ($check_exif_thumbnail ? 1 : 0) + + ($check_exif_read_data ? 1 : 0); + if ( !$fast_output) echo "<tr><td rowspan='$rows' valign='top'>$num</td><th colspan='2'>$file</th></tr>\n"; + if ($check_getimagesize) { + $len++; + $size = GetImageSize($file); + $error = error_msg();// clear message + if ( $size === false) { + $error = '<b style="color:red">GetImageSize returned false</b><br>'.$error; + $res_getimagesize = $error; + } else { + $res_getimagesize = '('.join($size,',').')'; + } + if ( !$fast_output) echo AddInfo("GetImageSize",$error,1); + } + if ( $check_exif_thumbnail) { + $len++; + if ($type!=IMAGETYPE_JPEG) {// && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { + $error = "<b style='color: green'>filetype not supported: $types[$type]</b>"; + $res_exif_thumbnail = $error; + } else { + $t_width = 0; + $t_height = 0; + $result = exif_thumbnail($file, $t_width, $t_height); + $error = error_msg();// clear message + if ( $result === false) { + $error = '<b style="color:red">exif_thumbnail returned false</b><br>'.$error; + if ( $t_width && $t_height) { + $error = "<b style='color:green'>$t_width x $t_height</b><br>$error"; + } + $res_exif_thumbnail = $error; + } else { + $res_exif_thumbnail = $t_width . " x " . $t_height; + } + } + if ( !$fast_output) echo AddInfo("exif_thumbnail",$error,1); } - $tab1 .= AddInfo("GetImageSize",$error); - /**/ - error_log("exif_read_data($file,'COMMENT,IFD0,EXIF,APP12', true);",0); - $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true); - $error = error_msg();// clear message - $tab1 .= AddInfo("exif_read_data",$error); - error_log("exif_read_data($file,'COMMENT,IFD0,EXIF,APP12', true): $error",0); - //error_log("exif_read_data($file)",0); - $res = ''; - if ( $image === false) { - $error = '<b style="color:red">exif_read_data returned false</b><br>'.$error; - } else { - // ah no!$error = error_msg(); // force o.k. - foreach($image as $Name => $Value) { - if ( $Name!='Thumbnail') { - if ( is_array($Value)) { - $len++; - $res .= AddInfo($Name,'Array('.count($Value).')'); - foreach( $Value as $idx => $Entry) { - if ($idx==='Thumbnail') $Entry = '&lt;data&gt;'; - $len++; - $res .= AddInfo($Name.':'.$idx,$Entry); + if ($check_exif_read_data) { + $len++; + if ($type!=IMAGETYPE_JPEG && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { + $res_exif_read_data = "<b style='color: green'>filetype not supported: $types[$type]</b>"; + if ( !$fast_output) echo AddInfo("exif_read_data",$res_exif_read_data); + $res = ''; + } else { + $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true); + $error = error_msg();// clear message + if ( !$fast_output) echo AddInfo("exif_read_data",$error,1); + $res = ''; + if ( $image === false) { + $res_exif_read_data = "<b style='color:red'>exif_read_data returned false</b><br>$error"; + } else { + $res_exif_read_data = $error; + // ah no!$error = error_msg(); // force o.k. + foreach($image as $Name => $Value) { + if ( $Name!='Thumbnail') { + if ( is_array($Value)) { + $len++; + $res .= AddInfo($Name,'Array('.count($Value).')'); + foreach( $Value as $idx => $Entry) { + if ($idx==='Thumbnail') $Entry = '&lt;data&gt;'; + $len++; + $res .= AddInfo($Name.':'.$idx,$Entry); + } + } else { + $len++; + $res .= AddInfo($Name,$Value); + } } - } else { - $len++; - $res .= AddInfo($Name,$Value); } } } } $tab2 .= "<tr><td rowspan='$len' valign='top'>$num</td></tr>\n"; $tab2 .= "<tr><th colspan='2'>$file</th></tr>\n"; - $tab2 .= "<tr><td><b>GetImageSize</b></td><td>$getimagesize</td></tr>\n"; - $tab2 .= "<tr><td><b>exif_read_data</b></td><td>$error</td></tr>\n"; + if ($check_getimagesize) { + $tab2 .= "<tr><th>GetImageSize</th><td>$res_getimagesize</td></tr>\n"; + } + if ($check_exif_thumbnail) { + $tab2 .= "<tr><th>exif_thumbnail</th><td>$res_exif_thumbnail</td></tr>\n"; + } + if ($check_exif_read_data) { + $tab2 .= "<tr><th>exif_read_data</th><td>$res_exif_read_data</td></tr>\n"; $tab2 .= $res; + } + if ( $fast_output) { + echo $tab2; + $tab2 = ''; + } } - //$tab1 .= "</table>\n"; - $tab2 .= "</table>\n"; - echo $tab1; + error_log("exif test page - checking files: ".count($possible)." done.",0); echo $tab2; + echo "</table>\n"; } else { echo "<h1 style='color:red'>function exif_read_data is not supported</h1>\n"; }
« previous php.cvs (#10023) next »