cs_zaza68
Messages postés7Date d'inscriptionvendredi 8 août 2003StatutMembreDernière intervention17 mai 2006
-
16 sept. 2005 à 21:47
ashboody
Messages postés91Date d'inscriptionsamedi 30 mars 2002StatutMembreDernière intervention11 octobre 2005
-
16 sept. 2005 à 23:37
Je souhaiterais récupérer la propriété "Commentaires" qui apparait dans les propriétés d'une image sur l'onglet "Résumé" pour l'afficher sur ma page WEB en php.
Est-ce que quelqu'un pourrait me dire si cette fonction existe ou comment faire pour afficher ce commentaire ?
ashboody
Messages postés91Date d'inscriptionsamedi 30 mars 2002StatutMembreDernière intervention11 octobre 2005 16 sept. 2005 à 23:35
voila le code. Il n'est pas de moi, J'ai juste encapsulé le tout dans une classe et enlevé les variables globales. J'espere que c'est ce qu'il te faut.
J'espere aussi que les sauts de lignes seront corrects dans mon POST. Si ma réponse te va accepte la
<?
/* main */
$header = new Parse_JPEG_Header("test.jpg");
if($header->GetComment()==false) echo "Comment not found";
else echo $header->GetComment();
?>
<?
class Parse_JPEG_Header {
var $JPEGTAB;
var $header;
function LoadArrays() {
$this->JPEGTAB[ "JPEG_Segment_Names" ] = array(
0xD0 => "Restart with modulo 8 count 0 (RST0)",
0xD1 => "Restart with modulo 8 count 1 (RST1)",
0xD2 => "Restart with modulo 8 count 2 (RST2)",
0xD3 => "Restart with modulo 8 count 3 (RST3)",
0xD4 => "Restart with modulo 8 count 4 (RST4)",
0xD5 => "Restart with modulo 8 count 5 (RST5)",
0xD6 => "Restart with modulo 8 count 6 (RST6)",
0xD7 => "Restart with modulo 8 count 7 (RST7)",
0xD8 => "Start of Image (SOI)",
0xD9 => "End of Image (EOI)",
0xDA => "Start of Scan (SOS)",
0xDB => "Define quantization Table(s) (DQT)",
0xDC => "Define Number of Lines (DNL)",
0xDD => "Define Restart Interval (DRI)",
0xDE => "Define Hierarchical progression (DHP)",
0xDF => "Expand Reference Component(s) (EXP)",
0xE0 => "Application Field 0 (APP0) - usually JFIF or JFXX",
0xE1 => "Application Field 1 (APP1) - usually EXIF or XMP/RDF",
0xE2 => "Application Field 2 (APP2) - usually Flashpix",
0xE3 => "Application Field 3 (APP3)",
0xE4 => "Application Field 4 (APP4)",
0xE5 => "Application Field 5 (APP5)",
0xE6 => "Application Field 6 (APP6)",
0xE7 => "Application Field 7 (APP7)",
0xE8 => "Application Field 8 (APP8)",
0xE9 => "Application Field 9 (APP9)",
0xEA => "Application Field 10 (APP10)",
0xEB => "Application Field 11 (APP11)",
0xEC => "Application Field 12 (APP12) - usually [picture info]",
0xED => "Application Field 13 (APP13) - usually photoshop IRB / IPTC",
0xEE => "Application Field 14 (APP14)",
0xEF => "Application Field 15 (APP15)",
0xF0 => "Reserved for JPEG extensions (JPG0)",
0xF1 => "Reserved for JPEG extensions (JPG1)",
0xF2 => "Reserved for JPEG extensions (JPG2)",
0xF3 => "Reserved for JPEG extensions (JPG3)",
0xF4 => "Reserved for JPEG extensions (JPG4)",
0xF5 => "Reserved for JPEG extensions (JPG5)",
0xF6 => "Reserved for JPEG extensions (JPG6)",
0xF7 => "Reserved for JPEG extensions (JPG7)",
0xF8 => "Reserved for JPEG extensions (JPG8)",
0xF9 => "Reserved for JPEG extensions (JPG9)",
0xFA => "Reserved for JPEG extensions (JPG10)",
0xFB => "Reserved for JPEG extensions (JPG11)",
0xFC => "Reserved for JPEG extensions (JPG12)",
0xFD => "Reserved for JPEG extensions (JPG13)",
function GetComment()
{
//Cycle through the header segments until COM is found or we run out of segments
$i = 0;
while ( ( $i < count( $this->header) ) && ( $this->header[$i]['SegName'] != "COM" ) )
{
$i++;
}
// Check if a COM segment has been found
if ( $i < count( $this->header) )
{
// A COM segment was found, return it's contents
return $this->header[$i]['SegData'];
}
else
{
// No COM segment found
return FALSE;
}
}
function Parse_JPEG_Header( $filename )
{
$this->LoadArrays();
// prevent refresh from aborting file operations and hosing file
ignore_user_abort(true);
// Attempt to open the jpeg file - the at symbol supresses the error message about
// not being able to open files. The file_exists would have been used, but it
// does not work with files fetched over http or ftp.
$filehnd = fopen($filename, 'rb');
// Check if the file opened successfully
if ( ! $filehnd )
{
// Could't open the file - exit
echo "Could not open file $filename
\n";
return FALSE;
}
// Read the first two characters
$data = fread( $filehnd, 2 );
// Check that the first two characters are 0xFF 0xDA (SOI - Start of image)
if ( $data != "\xFF\xD8" )
{
// No SOI (FF D8) at start of file - This probably isn't a JPEG file - close file and return;
echo "This probably is not a JPEG file
\n";
fclose($filehnd);
return FALSE;
}
// Read the third character
$data = fread( $filehnd, 2 );
// Check that the third character is 0xFF (Start of first segment header)
if ( $data{0} != "\xFF" )
{
// NO FF found - close file and return - JPEG is probably corrupted
fclose($filehnd);
return FALSE;
}
// Flag that we havent yet hit the compressed image data
$hit_compressed_image_data = FALSE;
// Cycle through the file until, one of: 1) an EOI (End of image) marker is hit,
// 2) we have hit the compressed image data (no more headers are allowed after data)
// 3) or end of file is hit
while ( ( $data{1} != "\xD9" ) && (! $hit_compressed_image_data) && ( ! feof( $filehnd ) ))
{
// Found a segment to look at.
// Check that the segment marker is not a Restart marker - restart markers don't have size or data after them
if ( ( ord($data{1}) < 0xD0 ) || ( ord($data{1}) > 0xD7 ) )
{
// Segment isn't a Restart marker
// Read the next two bytes (size)
$sizestr = fread( $filehnd, 2 );
// convert the size bytes to an integer
$decodedsize = unpack ("nsize", $sizestr);
// Save the start position of the data
$segdatastart = ftell( $filehnd );
// Read the segment data with length indicated by the previously read size
$segdata = fread( $filehnd, $decodedsize['size'] - 2 );
// Store the segment information in the output array
$this->header[] = array("SegType" => ord($data{1}),
"SegName" => $this->JPEGTAB[ "JPEG_Segment_Names" ][ ord($data{1}) ],
"SegDesc" => $this->JPEGTAB[ "JPEG_Segment_Descriptions" ][ ord($data{1}) ],
"SegDataStart" => $segdatastart,
"SegData" => $segdata );
}
// If this is a SOS (Start Of Scan) segment, then there is no more header data - the compressed image data follows
if ( $data{1} == "\xDA" )
{
// Flag that we have hit the compressed image data - exit loop as no more headers available.
$hit_compressed_image_data = TRUE;
}
else
{
// Not an SOS - Read the next two bytes - should be the segment marker for the next segment
$data = fread( $filehnd, 2 );
// Check that the first byte of the two is 0xFF as it should be for a marker
if ( $data{0} != "\xFF" )
{
// NO FF found - close file and return - JPEG is probably corrupted
fclose($filehnd);
return FALSE;
}
}
}
// Close File
fclose($filehnd);
// Alow the user to abort from now on
ignore_user_abort(false);