downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

read_exif_data> <exif_tagname
[edit] Last updated: Fri, 25 May 2012

view this page in

exif_thumbnail

(PHP 4 >= 4.2.0, PHP 5)

exif_thumbnailTIFF あるいは JPEG 形式の画像に埋め込まれたサムネイルを取得する

説明

string exif_thumbnail ( string $filename [, int &$width [, int &$height [, int &$imagetype ]]] )

exif_thumbnail() は、 TIFF あるいは JPEG 画像に 埋め込まれたサムネイルを読み込みます。

この関数を使用してサムネイルを出力したい場合は、 header() 関数を使用して mimetype 情報を送信する 必要があります。

exif_thumbnail() が画像を作成することはできないが、 そのサイズだけはわかるという可能性があります。そのような場合、返り値は FALSE となりますが width および height を設定されています。

パラメータ

filename

読み込む画像ファイルの名前。サムネイルが埋め込まれています。

width

返されるサムネイルの幅が格納されます。

height

返されるサムネイルの高さが格納されます。

imagetype

返されるサムネイルの画像タイプが格納されます。 TIFF あるいは JPEG のどちらかです。

返り値

埋め込まれたサムネイルを返します。画像がサムネイルを含まない場合は FALSE を返します。

変更履歴

バージョン 説明
4.3.0 オプションで widthheight および imagetype が使用可能になりました。
4.3.0 サムネイルを TIFF フォーマットで返すことがあります。

例1 exif_thumbnail() の例

<?php
if (array_key_exists('file'$_REQUEST)) {
    
$image exif_thumbnail($_REQUEST['file'], $width$height$type);
} else {
    
$image false;
}
if (
$image!==false) {
    
header('Content-type: ' .image_type_to_mime_type($type));
    echo 
$image;
    exit;
} else {
    
// no thumbnail available, handle the error here
    
echo 'No thumbnail available';
}
?>

参考

  • exif_read_data() - JPEG あるいは TIFF から EXIF ヘッダを読み込む
  • image_type_to_mime_type() - getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeから返される 画像形式のMIMEタイプを取得する



read_exif_data> <exif_tagname
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes exif_thumbnail
thrustvector at &#39;gee&#39;mail dot com 29-Jul-2008 07:40
If you've edited the image with image editing software and it no longer contains an exif thumbnail, I've created a script that will add one back into it, using the "PHP Exif Library": http://pel.sourceforge.net/index.php

<?php
require_once('../PEL/PelJpeg.php');
require_once(
'../PEL/PelIfd.php');
$fullpath = 'images/DSC_0013c.JPG'# path of source image (does not contain an exif thumbnail)
     
$jpeg = new PelJpeg($fullpath);
 
$exif = $jpeg->getExif();
 
$tiff = $exif->getTiff();
 
$ifd0 = $tiff->getIfd();        # need this so that we can later link it to the new IFD

 
$ifd1 = $ifd0->getNextIfd();
if (!
$ifd1) {        # Only create thumbnail if one doesn't exist (i.e. there is no IFD1)
   
$ifd1 = new PelIfd(1);
   
$ifd0->setNextIfd($ifd1); # point ifd0 to the new ifd1 (or else ifd1 will not be read)

   
$original = ImageCreateFromString($jpeg->getBytes()); # create image resource of original
   
$orig_w=imagesx($original);
   
$orig_h=imagesy($original);
   
$wmax = 160;
   
$hmax = 120;

    if (
$orig_w>$wmax || $orig_h>$hmax) {
       
$thumb_w=$wmax;
       
$thumb_h=$hmax;
        if (
$thumb_w/$orig_w*$orig_h>$thumb_h)
           
$thumb_w=round($thumb_h*$orig_w/$orig_h); # maintain aspect ratio
       
else
           
$thumb_h=round($thumb_w*$orig_h/$orig_w);
    }
    else {
# only set the thumb's size if the original is larger than 'wmax'x'hmax'
       
$thumb_w=$orig_w;
       
$thumb_h=$orig_h;
    }

       
# create image resource with thumbnail sizing
   
$thumb=imagecreatetruecolor($thumb_w,$thumb_h);
       
## Resize original and copy to the blank thumb resource
   
imagecopyresampled($thumb,$original,
                              
0,0,0,0,$thumb_w,$thumb_h,$orig_w,$orig_h);

       
# start writing output to buffer
   
ob_start();       
       
# outputs thumb resource contents to buffer
   
ImageJpeg($thumb);   
       
# create PelDataWindow from buffer thumb contents (and end output to buffer)
   
$window = new PelDataWindow(ob_get_clean());

    if (
$window) {   

       
$ifd1->setThumbnail($window); # set window data as thumbnail in ifd1
       
$outpath = $fullpath; # overwrite original jpg file
       
file_put_contents($outpath, $jpeg->getBytes()); # write everything to output filename
            # Show thumbnail in file:
       
echo '<img src="thumb_exif.php?image='.$outpath.'" border=0 alt="If you see this, it did not work"><br>';

       
    }
}
else {
    echo
'ifd1 already exists! (IFD1 is where the thumbnail is stored)<br>';
}
?>
<?php
# This is the code in thumb_exif.php :
       
$imgdat = exif_thumbnail($_REQUEST['image'], $width, $height, $type);
       
header('Content-type: ' . image_type_to_mime_type($type));
        echo(
$imgdat);
?>

If you have a lot of such files, you can easily make a script that searches them out and adds thumbnails to their exif.
Miguel Vitorino 08-Oct-2007 12:37
use this if you want to embed a thumbnail directly on the HTML page without writing it first to a file:

<?php
$image
= exif_thumbnail($file, $width, $height, $type);

echo
"<img  width='$width' height='$height' src='data:image/gif;base64,".base64_encode($image)."'>";
?>
04-Jan-2007 11:23
If you want to convert from TIFF to JPG you can use ImageMagick if it is installed in your server.

<?php
$exec
= 'convert /path/to/file.tiff /path/to/file.jpg 2>&1';
@
exec($exec, $exec_output, $exec_retval);

//possible error
print_r($exec_output)
?>
hanspeter dot debets at dendrite dot com 13-Jan-2005 11:35
Great that the thumbnail can be in TIFF format (f.i. Kodak cameras have embedded thumbnail in TIFF) BUT I have not been able to show TIFF as an embedded image in HTML (using the <IMG...> tag). There seems to be no function in PHP to change TIFF to, lets say, JPG. (imagecreatefromstring gives a 'unknown datatype' error for the TIFF stream. So below sample works great for JPEG embedded thumbnail, but not for TIFF embedded (but then, maybe I did something wrong?):

test_exif.php:

<HTML>
<HEAD>
    <TITLE>Test EXIF Read  </TITLE>
</HEAD>
<BODY>
<?php
$image
='P0000614.JPG';
echo(
"<B>". $image. "</B>:<BR><BR>\n");

$exif = exif_read_data($image, 'ANY_TAG',true);
if (!
$exif===false)
{
    echo(
"Image contains headers<br><br>");
    echo(
"<A href=showthumb.php?image=" . $image ."> <IMG border=0 src=showthumb.php?image=" . $image ."></A><BR><BR>");

    foreach (
$exif as $key => $section)
    {
        foreach (
$section as $name => $val)
        {
            echo
"$key.$name: $val<br>\n";
        }
    }
}
else
{
    echo(
"Sorry, image <B>".$image . "</B> does not contain (readable) EXIF data.");
}
?>
</BODY>
</HTML>

showthumb.php:

<?php
$imgdat
= exif_thumbnail($_REQUEST['image'],$width, $height, $type);
header('Content-type: ' . image_type_to_mime_type($type));
echo(
$imgdat);
?>

When clicking on the <A> opens the TIFF image in the program that windows assigned to this type, but the JPEG opens in the browser.

I am using PHP 4.3.6 on windows iis 4 (yeah, I know.....)
Eric 13-Jun-2004 01:05
This will allow you to manipulate the thumbnail image ($imgJpeg) using the various gd commands:

<?php
 
if (($imgJpeg = exif_thumbnail($strImagePath)) === false)
    print
"No Thumbnail!";
  else
   
$imgJpeg = imageCreateFromString($imgJpeg);
?>
neothermic at ya[]o dot com ADD ho IN GAP 26-May-2004 04:01
You can use the EXIF thumbnail function to extract the thumnails for use in an image gallery. I've found this to be faster than using other GD functions to convert the image to a smaller one then save it.

Here is the code I use to generate thumbnails. Remember, this is more of a utility script, although its simple to modifiy it for use...

<?PHP
set_time_limit
(0); //use this to make sure the script doesn't time out on large number of images.
//error_reporting(E_NONE); //use this to disable errors in a production script

function getmicrotime() {
   
$temparray=split(" ",microtime());
   
$returntime=$temparray[0]+$temparray[1];
    return
$returntime;
}

//lets make it slightly proper HTML. not valid, but can be changed quickly to be
echo "<html>
<head><title>Processing...</title></head>
<body>"
;

$maindir = "." ; //change this to what ever directory needs scanning
$mydir = opendir($maindir) ;
$starttime=getmicrotime();
$i = 0; //set the count of images processed to 0
while($fn = readdir($mydir)) //scan through the whole directory
   
{//open while

       
$startimagetime = getmicrotime();
       
$ext = strtolower(substr($fn,strlen($fn)-3)); //get the extension of an image
       
if ($ext == "jpg") {
           
$i++; //increase the number of images processed
           
echo $fn ." is being processed....<br>";
           
flush(); //needed to display each image progress
           

           
$image = exif_thumbnail($fn, $width, $height, $type);

            if (
$image!==false) {
                   
//if there is a good enough thumbnail to use, we have it here.
                    //extract it and put it in the file, call it [original image name].thumb.jpg
                
$handle = fopen ($fn.".thumb.jpg", 'a');
                
//write the thumbnail image
                
fwrite($handle, $image);
            } else {
                
// no thumbnail available, handle the error here
                
echo "No thumbnail available for file ".$fn."<br>";
            }
        }
}
closedir($mydir);
$endtime=getmicrotime();

echo
"<br>All Images have been processed, script is finshed.<br>Total processing time: ";
print
$endtime-$starttime;
echo
"<br> Images processed: " .$i;
echo
"</body>";
echo
"</html>"

?>

Its a bit crude, I must admit, but it can easily be adapted to suit user.

NeoThermic

 
show source | credits | stats | sitemap | contact | advertising | mirror sites