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

search for in the

image_type_to_extension> <gd_info
Last updated: Fri, 11 Apr 2008

view this page in

getimagesize

(PHP 4, PHP 5)

getimagesize — Obtener el tamaño de una imagen

Descripción

array getimagesize ( string $nombre_archivo [, array &$info_imagen ] )

La función getimagesize() determinará el tamaño de cualquier archivo de imagen dado y devuelve las dimensiones junto con el tipo de archivo y una cadena de texto de altura/ancho a ser usada en una etiqueta HTML IMG corriente y el tipo de contenido HTTP correspondiente.

getimagesize() puede también devolver un poco más de información en el parámetro info_imagen .

Note: Note que JPC y JP2 son capaces de tener componentes con diferentes profundidades de bits. En este caso, el valor para "bits" es el de la profundidad de bits más alta encontrada. Asimismo, los archivos JP2 pueden contener múltiples secuencias de código JPEG 2000. En este caso, getimagesize() devuelve los valores para la primera secuencia de código que encuentra en la raíz del archivo.

Note: La información sobre íconos es tomada del ícono con la mayor tasa de bits.

Lista de parámetros

nombre_archivo

Este parámetro especifica el archivo sobre el cual desea recuperar información. Puede hacer referencia a un archivo local o (cuando la configuración lo permita) un archivo remoto usando una de las secuencias soportadas.

info_imagen

Este parámetro opcional le permite extraer algunos datos extendidos del archivo de imagen. Actualmente, devolverá los diferentes marcadores APP de JPG como una matriz asociativa. Algunos programas usan estos marcadores para embeber información de texto en imágenes. Un uso muy común es el embeber información » IPTC en el marcador APP13. Puede usar la función iptcparse() para convertir el marcador APP13 binario hacia algo legible.

Valores retornados

Devuelve una matriz con 5 elementos.

Los índices 0 y 1 contienen respectivamente el ancho y la altura de la imagen.

Note: Puede que algunos formatos no contengan una imagen o que contengan múltiples imágenes. En estos casos, puede que getimagesize() no sea capaz de determinar el tamaño de la imagen apropiadamente. getimagesize() devolverá cero como valor de ancho y altura en tales casos.

El índice 2 es una de las constantes IMAGETYPE_XXX que indica el tipo de imagen.

El índice 3 es una cadena de texto con el valor height="yyy" width="xxx" apropiado que puede ser usado directamente en una etiqueta IMG.

mime es el tipo MIME correspondiente de la imagen. Esta información puede ser usada para despachar imágenes con las cabeceras HTTP Content-type correctas:

Example #1 getimagesize() y los tipos MIME

<?php
$tam 
getimagesize($nombre_archivo);
$da fopen($nombre_archivo"rb");
if (
$tam && $da) {
  
header("Content-type: {$tam['mime']}");
  
fpassthru($da);
  exit;
} else {
  
// error
}
?>

channels será 3 para imágenes RGB y 4 para imágenes CMYK. bits es el número de bits para cada color. Sin embargo, para algunos tipos de imagen, la presencia de estos valores puede ser un poco confusa. Como un ejemplo, GIF siempre usa 3 canales por píxel, pero el número de bits por píxel no puede ser calculado para un GIF animado con una tabla de colores global.

En caso de fallos, se devuelve FALSE.

Errors/Exceptions

Si es imposible acceder a la imagen en nombre_archivo , o si no es una imagen válida, getimagesize() generará un error de nivel E_WARNING. En caso de un error de lectura, getimagesize() generarrá un error de nivel E_NOTICE.

Registro de cambios

Versión Descripción
5.3.0 Se agregó el soporte para íconos.
5.2.3 Los errores de lectura generados por esta función disminuyeron su nivel a E_NOTICE, de su nivel anterior E_WARNING.
4.3.2 Apareció es soporte para JPC, JP2, JPX, JB2, XBM, y WBMP.
4.3.2 El soporte para JPEG 2000 fue agregado para el parámetro info_imagen .
4.3.0 bits y channels están presentes para otros tipos de imágenes también.
4.3.0 Se agregó mime.
4.3.0 Se agregó el soporte para SWC.
4.2.0 Se agregó el soporte para TIFF.
4.0.5 Se agregó el soporte para URL.

Ejemplos

Example #2 getimagesize (archivo)

<?php
list($ancho$altura$tipo$atr) = getimagesize("img/bandera.jpg");
echo 
"<img src=\"img/bandera.jpg\" $atr alt=\"ejemplo de getimagesize()\" />";
?>

Example #3 getimagesize (URL)

<?php
$tam 
getimagesize("http://www.example.com/gifs/logo.gif");

// si el nombre de archivo contiene un espacio, codificarlo apropiadamente
$tam getimagesize("http://www.example.com/gifs/lo%20go.gif");

?>

Example #4 getimagesize() devolviendo IPTC

<?php
$tam 
getimagesize("imagen_prueba.jpg"$info);
if (isset(
$info["APP13"])) {
    
$iptc iptcparse($info["APP13"]);
    
var_dump($iptc);
}
?>

Notes

Note: La función getimagesize() no requiere de la biblioteca de imágenes GD.



image_type_to_extension> <gd_info
Last updated: Fri, 11 Apr 2008
 
add a note add a note User Contributed Notes
getimagesize
mike
26-Apr-2008 01:26
Great script shmohel, a bit more minified...

<?php

function scale_image($p,$mw='',$mh='') { // path max_width max_height
   
if(list($w,$h) = @getimagesize($p)) {
    foreach(array(
'w','h') as $v) { $m = "m{$v}";
        if(${
$v} > ${$m} && ${$m}) { $o = ($v == 'w') ? 'h' : 'w';
       
$r = ${$m} / ${$v}; ${$v} = ${$m}; ${$o} = ceil(${$o} * $r); } }
    return(
"<img src='{$p}' alt='image' width='{$w}' height='{$h}' />"); }
}

?>
devon at example dot com
07-Apr-2008 09:14
***********************************
Copies Source Image to Destination Image
***********************************
1. Copies source image
2. Calculates image dimensions
3. Resizes image (you specify max height/width)
4. Retains aspect ratio
5. Writes destination image
***********************************
This was created from a variety of code snippets
I've found here at php.net and other places on the web. 
I take no credit for any of this code other than
putting the pieces together.

<?php

$source_pic
= 'images/source.jpg';
$destination_pic = 'images/destination.jpg';
$max_width = 500;
$max_height = 500;

$src = imagecreatefromjpeg($source_pic);
list(
$width,$height)=getimagesize($source_pic);

$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;

if( (
$width <= $max_width) && ($height <= $max_height) ){
   
$tn_width = $width;
   
$tn_height = $height;
    }elseif ((
$x_ratio * $height) < $max_height){
       
$tn_height = ceil($x_ratio * $height);
       
$tn_width = $max_width;
    }else{
       
$tn_width = ceil($y_ratio * $width);
       
$tn_height = $max_height;
}

$tmp=imagecreatetruecolor($tn_width,$tn_height);
imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);

imagejpeg($tmp,$destination_pic,100);
imagedestroy($src);
imagedestroy($tmp);

?>
info at alex-lawrence dot com
02-Apr-2008 03:17
Could be useful (didn´t know where to post it):

function getImageErrors( $filename, $type = "", $minWidth = 0, $minHeight = 0, $maxWidth = 0, $maxHeight = 0, $maxFileSize = 0 )
{
    $errors = array();
    if ( file_exists( $filename ) )
    {
        $ending = substr( $filename, strpos( $filename, "." ) );
        if ( is_array( $type ) )
        {
            $isTypeOf = false;
            foreach( $type as $eachtype )
            {
                if ( $ending == $eachtype )
                {
                    $isTypeOf = true;
                }
            }
            if ( ! $isTypeOf )
            {
                $errors[ 'type' ] = $ending;
            }
        }
        elseif ( $type != "" )
        {
            if ( $ending != $type )
            {
                $errors[ 'type' ] = $ending;
            }
        }
        $size = getimagesize( $filename );
        if ( $size[ 0 ] < $minWidth )
        {
            $errors[ 'minWidth' ] = $size[ 0 ];
        }
        if ( $size[ 1 ] < $minHeight )
        {
            $errors[ 'minHeight' ] = $size[ 1 ];
        }
        if ( ( $maxWidth > $minWidth ) && ( $size[ 0 ] > $maxWidth ) )
        {
            $errors[ 'maxWidth' ] = $size[ 0 ];
        }
        if ( ( $maxHeight > $minHeight ) && ( $size[ 1 ] > $maxHeight ) )
        {
            $errors[ 'maxHeight' ] = $size[ 1 ];
        }
        if ( ( $maxFileSize > 0 ) && ( filesize( $filename ) > $maxFileSize ) )
        {
            $errors[ 'maxFileSize' ] = filesize( $filename );
        }
    }
    else
    {
        $errors[ 'filename' ] = "not existing";
    }
    return ( count( $errors ) > 0 ? $errors : null );
}
cloned at clonedmadman dot com
25-Feb-2008 11:01
Well, I am making a script which will resize the image when uploaded, however, i am making a multi-uploader, so i came across with a problem: an efficient way of getting a pictures height and width and storing them in an array to resize later. This is what i came up with:

<?php
$links
= array("test1.jpg", "test2.png");
$sizearray = array();
$count = count($links);
for(
$i = 0; $i < $count; $i++) {
   
$size = getimagesize($links[$i]);
    list(
$width, $height) = $size;
   
$sizearray[$links[$i]] = array("width" => $width, "height" => $height);
}
print_r($sizearray);
// which will print out: Array ( [test1.jpg] => Array ( [width] => 300 [height] => 400 ) [test2.png] => Array ( [width] => 680 [height] => 100 ) )
?>
shmohel at gmail dot com
12-Feb-2008 03:27
Rather than making a lengthy function that essentially runs twice (once as width, once as height) I came up with a helpful function that uses variable variables to set a maximum height/width. Hope someone finds this helpful.

function scaleimage($location, $maxw=NULL, $maxh=NULL){
    $img = @getimagesize($location);
    if($img){
        $w = $img[0];
        $h = $img[1];

        $dim = array('w','h');
        foreach($dim AS $val){
            $max = "max{$val}";
            if(${$val} > ${$max} && ${$max}){
                $alt = ($val == 'w') ? 'h' : 'w';
                $ratio = ${$alt} / ${$val};
                ${$val} = ${$max};
                ${$alt} = ${$val} * $ratio;
            }
        }

        return("<img src='{$location}' alt='image' width='{$w}' height='{$h}' />");
    }
}
Anonymous
28-Jan-2008 06:14
// A way to maintain Aspect Ratio
// Here using standard aspect ratio of 4:3 for landscape and 3:4 for portrait.
// example is 50% image resize

//NewWidth = GivenHeight * (OriginalWidth / OriginalHeight)
//NewHeight = GivenWidth * (OriginalHeight / OriginalWidth)
       
$defaultImageWidth = 160; //your gallery image width
$defaultImageHeight = 120; //your gallery image height

$imageWidth = 462; // use getimagesize() to get image width
$imageHeight = 432; // use getimagesize() to get image height
   
if($imageWidth > $imageHeight)
{
    // landscape image
   
    $newWidth = $defaultImageWidth;
    $newHeight = (int)($defaultImageWidth * $imageHeight / $imageWidth);
   
    if($newHeight > $defaultImageHeight)
    {
        $newHeight = $defaultImageHeight;
        $newWidth = (int)($defaultImageHeight * $imageWidth / $imageHeight);
    }

}
elseif ($imageHeight > $imageWidth)
{
    // portrait image
   
    $newHeight = $defaultImageHeight;
    $newWidth = (int)($defaultImageHeight * $imageWidth / $imageHeight);
   
    if($newWidth > $defaultImageWidth)
    {
        $newWidth = $defaultImageWidth;
        $newHeight = (int)($defaultImageWidth * $imageHeight / $imageWidth);
    }
   
}
else
{
    // square image
   
    $newWidth = $defaultImageWidth;
    $newHeight = $defaultImageHeight;
   
}

// here using Image Magick command line utility to resize image, OR you can use some other package.
//@exec("/usr/local/bin/convert $sourceImageFilePath - -resize $newWidthx$newHeight\! $destinationImageFilePath");

echo '<b>New Width:</b>'.$newWidth;
echo "<br>";
echo '<b>New Height:</b>'.$newHeight;
pfarthing at hotmail dot com
11-Jan-2008 12:35
Correction: to find $y2 it should be...

// set y side to a proportional size
$y2 = $m * $x_max; // not $x1

Thanks Norbert =)
info at personalmis dot com
07-Jan-2008 01:42
Seems the various ways people are trying to proportionaly scale an image, up or down, could be more straight forward if one remembers ones algebra.

The formula is, y = mx, where m is the slope of the line. This is the ratio of y:x or m = y/x.

So if...

// max values for x and y
$y_max = 600;
$x_max = 800;

// image size
$y1 = 2000;
$x1 = 3000;

// use width for scaling
if ($x1 > $x_max)
{
    // find slope
    $m = $y1/$x1;
    // set x side to max
    $x2 = $x_max;
    // set y side to a proportional size
    $y2 = $m * $x1;
}

The new image proportionally scaled will be x2 = 800, y2 = 533 (rounded).

To do it from the y side, simply reverse the x's and y's.
redcore at gmail dot com
09-Aug-2007 11:50
It's always good to check out an image's dimensions while attempting to upload to your server or database...especially if it's going to be displayed on a page that doesn't accomodate images beyond a particular size.

<?php

$tmpName
= $_FILES['userfile']['tmp_name'];
       
list(
$width, $height, $type, $attr) = getimagesize($tmpName);

if(
$width>275 || $height>275)
{
die(
"exceeded image dimension limits.");
}

?>
laurens dot stoetzel at gmail dot com
03-Aug-2007 08:18
In reply to John (http://de.php.net/manual/de/function.getimagesize.php#61514):
list will only work with numeric arrays.

<?php
 
//renumber
 
$my_image = array_values(getimagesize('test.jpg'));
 
//use list on new array
 
list($width, $height, $type, $attr) = $my_image;

 
//view new array
 
print_r($my_image);

 
//spit out content
 
echo 'Attribute: '.$attr.'<br />';
  echo
'Width: '.$width.'<br />';
?>
phpnetUNDERSCOREspam at erif dot org
19-Jun-2007 09:26
an alternative to the three options below for finding the width and height of data you know to be an image:

$image = imagecreatefromstring($mydata);
$width = imagesx($image);
$height = imagesy($image);
boshka at gmail dot com
01-Feb-2007 02:40
I was trying to workaround with the problem of getting the mime type of the image from the raw data (the images data is stored in a database and the mime type is not known in advance). Since getimagesize requires a file name, there are some ways to deal with it:
1. call getimagesize with a URL which points to the image - this is too slow.
2. use PHP file i/o wrapper class.
3. use temporary files. The code for #3 could be as follows:

    function getimagesize_raw($data){
        $cwd = getcwd(); #get current working directory
        $tempfile = tempnam("$cwd/tmp", "temp_image_");#create tempfile and return the path/name (make sure you have created tmp directory under $cwd
        $temphandle = fopen($tempfile, "w");#open for writing
        fwrite($temphandle, $data); #write image to tempfile
        fclose($temphandle);
        $imagesize = getimagesize($tempfile); #get image params from the tempfile
        unlink($tempfile); // this removes the tempfile
        return $imagesize;
}
jens at kulmegies dot de
31-Oct-2006 03:30
In addition to thomporter's quick-reference of the output array, here's what PHP 4.4.0 does:

Array[0] = Width
Array[1] = Height
Array[2] = Image Type Flag
Array[3] = width="xxx" height="xxx"
Array[bits] = bits
Array[channels] = channels
Array[mime] = mime-type

There is no chance of getting the mime-type by accessing Array[6]...
egingell at sisna dot com
06-May-2006 12:14
<?

// These constants are used by image_info(), below.
define ('IMAGE_WIDTH', 'width');
define ('IMAGE_HEIGHT', 'height');
define ('IMAGE_TYPE', 'type');
define ('IMAGE_ATTR', 'attr');
define ('IMAGE_BITS', 'bits');
define ('IMAGE_CHANNELS', 'channels');
define ('IMAGE_MIME', 'mime');

/**
 * mixed image_info( file $file [, string $out] )
 *
 * Returns information about $file.
 *
 * If the second argument is supplied, a string representing that information will be returned.
 *
 * Valid values for the second argument are IMAGE_WIDTH, 'width', IMAGE_HEIGHT, 'height', IMAGE_TYPE, 'type',
 * IMAGE_ATTR, 'attr', IMAGE_BITS, 'bits', IMAGE_CHANNELS, 'channels', IMAGE_MIME, and 'mime'.
 *
 * If only the first argument is supplied an array containing all the information is returned,
 * which will look like the following:
 *
 *    [width] => int (width),
 *    [height] => int (height),
 *    [type] => string (type),
 *    [attr] => string (attributes formatted for IMG tags),
 *    [bits] => int (bits),
 *    [channels] => int (channels),
 *    [mime] => string (mime-type)
 *
 * Returns false if $file is not a file, no arguments are supplied, $file is not an image, or otherwise fails.
 *
 **/
function image_info($file = null, $out = null) {

   
// If $file is not supplied or is not a file, warn the user and return false.
   
if (is_null($file) || !is_file($file)) {
        echo
'<p><b>Warning:</b> image_info() => first argument must be a file.</p>';
        return
false;
    }

   
// Defines the keys we want instead of 0, 1, 2, 3, 'bits', 'channels', and 'mime'.
   
$redefine_keys = array(
       
'width',
       
'height',
       
'type',
       
'attr',
       
'bits',
       
'channels',
       
'mime',
    );

   
// If $out is supplied, but is not a valid key, nullify it.
   
if (!is_null($out) && !in_array($out, $redefine_keys)) $out = null;

   
// Assign usefull values for the third index.
   
$types = array(
       
1 => 'GIF',
       
2 => 'JPG',
       
3 => 'PNG',
       
4 => 'SWF',
       
5 => 'PSD',
       
6 => 'BMP',
       
7 => 'TIFF(intel byte order)',
       
8 => 'TIFF(motorola byte order)',
       
9 => 'JPC',
       
10 => 'JP2',
       
11 => 'JPX',
       
12 => 'JB2',
       
13 => 'SWC',
       
14 => 'IFF',
       
15 => 'WBMP',
       
16 => 'XBM'
   
);
   
$temp = array();
   
$data = array();

   
// Get the image info using getimagesize().
    // If $temp fails to populate, warn the user and return false.
   
if (!$temp = getimagesize($file)) {
        echo
'<p><b>Warning:</b> image_info() => first argument must be an image.</p>';
        return
false;
    }

   
// Get the values returned by getimagesize()
   
$temp = array_values($temp);

   
// Make an array using values from $redefine_keys as keys and values from $temp as values.
   
foreach ($temp AS $k => $v) {
       
$data[$redefine_keys[$k]] = $v;
    }

   
// Make 'type' usefull.
   
$data['type'] = $types[$data['type']];

   
// Return the desired information.
   
return !is_null($out) ? $data[$out] : $data;   
}

?>
Russell Chappell
31-Mar-2006 05:01
For those of you who are confused about what the mime type IE displays image/pjpeg and other browsers image/jpeg and are building in checks for all of your scripts to tell the difference i would suggest using the getimagesize() mime results which will always be image/jpeg regardless what browser you use.

<?php
$info
= getimagesize("image.jpg");
foreach(
$info as $key => $value) {
    echo
$key . ' - ' . $value . '<br />';
}
?>

Where it says mime always is image/jpeg
John
06-Feb-2006 08:57
I was coming here to see if there was a simple way to get the height, width, and mime type of an image I have uploaded and while I thought the following code would work because it is printed above
<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
?>

it didnt when I tried to echo out $type; so heres my fix, there may be a better way but it works for me!

<?php
$blah
= getimagesize("folder/file.gif");
$type = $blah['mime'];
$width = $blah[0];
$height = $blah[1];
?>

and then you can just echo out one of the variables about to get whichever you would desire.
gormozus at yahoo dot com
15-Nov-2005 07:56
getimagesize() seems to cache the results, so if you resize an image (using the methods described earlier) and you want to re-read its width and height, use imagesx() and imagesy() to get the actual information.
webmaster at WWW.ELLESSEWEB.NET
26-Oct-2005 02:10
This is a useful function to display a thumbnail of a whatever image.
This piece of code has been lightly modified from an example found on <b>NYPHP.ORG</B>.
This function can build a thumbnail of any size you want and display it on your browser!
Hope it can be useful for you guys!

<?php

function makeThumbnail($o_file, $t_ht = 100) {
   
$image_info = getImageSize($o_file) ; // see EXIF for faster way
   
   
switch ($image_info['mime']) {
        case
'image/gif':
            if (
imagetypes() & IMG_GIF)  { // not the same as IMAGETYPE
               
$o_im = imageCreateFromGIF($o_file) ;
            } else {
               
$ermsg = 'GIF images are not supported<br />';
            }
            break;
        case
'image/jpeg':
            if (
imagetypes() & IMG_JPG)  {
               
$o_im = imageCreateFromJPEG($o_file) ;
            } else {
               
$ermsg = 'JPEG images are not supported<br />';
            }
            break;
        case
'image/png':
            if (
imagetypes() & IMG_PNG)  {
               
$o_im = imageCreateFromPNG($o_file) ;
            } else {
               
$ermsg = 'PNG images are not supported<br />';
            }
            break;
        case
'image/wbmp':
            if (
imagetypes() & IMG_WBMP)  {
               
$o_im = imageCreateFromWBMP($o_file) ;
            } else {
               
$ermsg = 'WBMP images are not supported<br />';
            }
            break;
        default:
           
$ermsg = $image_info['mime'].' images are not supported<br />';
            break;
    }
   
    if (!isset(
$ermsg)) {
       
$o_wd = imagesx($o_im) ;
       
$o_ht = imagesy($o_im) ;
       
// thumbnail width = target * original width / original height
       
$t_wd = round($o_wd * $t_ht / $o_ht) ;

       
$t_im = imageCreateTrueColor($t_wd,$t_ht);
       
       
imageCopyResampled($t_im, $o_im, 0, 0, 0, 0, $t_wd, $t_ht, $o_wd, $o_ht);
       
       
imageJPEG($t_im);
       
       
imageDestroy($o_im);
       
imageDestroy($t_im);
    }
    return isset(
$ermsg)?$ermsg:NULL;
}
?>

Here the code to call the function:

<?

header
("Content-type: image/jpeg");
makeThumbnail("http://it2.php.net/images/php.gif", 300);

?>
Mark at Mild Peril
13-Oct-2005 01:54
To solve the problem with using absolute site filepaths, as experienced by Brian:

$size = getimagesize($_SERVER["DOCUMENT_ROOT"].$file);

(where $file is something like "/rootdir/graphics/photo.jpg")
paul at goldenbakery dot nl
05-Aug-2005 11:02
Note that the canvas of a Flash movie can not be empty for getimagesize() to read the dimensions of an SWF. Not sure if this is a bug, a feature or just a limitation of the SWF format.

Flash version does not seem to matter. Also tested with Flash 8 beta.
Sean
30-May-2005 07:23
I needed a quick way to make a group of images uniformly sized, but only on one page.  So creating a new set of thumbnails was overdoing the whole thing.  I made up this script that seems to do the trick.

<?php
     $image
"absolute/path/to/image/image.jpg";               
    
$size = getimagesize("$image");
      
$height = $size[1];
      
$width = $size[0];
     if (
$height > 150)
          {
              
$height = 150;
              
$percent = ($size[1] / $height);
              
$width = ($size[0] / $percent);
          }
     else if (
$width > 150)
          {
              
$width = 150;
              
$percent = ($size[0] / $width);
              
$height = ($size[1] / $percent);
          }
     echo
"<img src\"image/path/image.jpg\" height=\"$height\" width=\"$width\" />";
?>
irregular at inbox dot ru
30-Apr-2005 01:24
I've wrote this piece of useful code.
May be it will be useful for you.
But i got a problem - if source image is in the area with need of authorization then the functions that read some files from that place (i.e. getimagesize, imagejpeg) does not work!
How to solve it?

<?php
//i't a stand-alone file named resize.php
//the feature is caching
// /image/thumbcache folder is used with file name forming by md5($img.$calc_width.$calc_height);
//it gets such parameters:
//img - image address (URL)
//w - optional width
//h - optional height
//if you set either w or h, then the image is resized proportionaly, according to the source
//if you set neither w nor h then the script just output file
//if you set both w or h then the image will be resized exactly how you want

   
$server_root = 'http://'.$_SERVER['SERVER_NAME'].'/';

    if (isset(
$_GET['img']) && ((isset($_GET['w']) || isset($_GET['h'])))
    {
       
$img = substr($_GET['img'],0,100);
        if (isset(
$_GET['w'])) $w = substr($_GET['w'],0,10);
        if (isset(
$_GET['h'])) $h = substr($_GET['h'],0,10);

       
error_reporting(0);

       
//check cache
       
$hash = md5($img.$w.$h);
       
$pos = strrpos($img,".");
       
$ext = substr($img,$pos+1,strlen($img)-$pos);
       
$fname = $hash.'.'.$ext;
       
$cachedim = @imagecreatefromjpeg($serverroot.'images/thumbcache/'.$fname);
        if (
$cachedim) //just show cached thumbnail
       
{
           
header("Content-type: image/jpeg");
           
imagejpeg($cachedim,'',100);
        }
        else
//create and cache thumbnail and show it 'cause it's not in cache
       
{
            list(
$width, $height, $type, $attr) = getimagesize($img);
            if (
$type==2) //jpeg
           
{
               
$im = @imagecreatefromjpeg($img); /* Attempt to open */
               
if (!$im) { /* See if it failed */
           
$im  = imagecreate(150, 30); /* Create a blank image */
                   
$bgc = imagecolorallocate($im, 255, 255, 255);
                   
$tc  = imagecolorallocate($im, 0, 0, 0);
                   
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
                   
imagestring($im, 1, 5, 5, "Error loading image!", $tc);
                }
                else
                {
                   
//constrain proportions if needed
                   
if (isset($w)){ if ($w==0) $w = $width; }
                    else
$w = $width*$h/$height;

                    if (isset(
$h)){ if ($h==0) $h = $height; }
                    else
$h = $height*$w/$width;

                   
$dstw=isset($w)?$w:$width;
                   
$dsth=isset($h)?$h:$height;
                   
$tim = imagecreatetruecolor($dstw,$dsth);
           
           
imagecopyresampled($tim,$im,0,0,0,0,$dstw,$dsth,$width,$height);
                   
                   
header("Content-type: image/jpeg");
                   
imagejpeg($tim,'./images/thumbcache/'.$fname,100);
                   
imagejpeg($tim,'',100);
                }
            }
        }
       
error_reporting(E_ALL);
    }

?>
ajreading at classixshop dot com
21-Apr-2005 10:30
A simple piece of code i wrote to proportionally resize an image to a max height and width then display it

<?php
// Max height and width
$max_width = 100;
$max_height = 100;

// Path to your jpeg

$upfile '/path/to/file.jpg';
   
Header("Content-type: image/jpeg");
   
   
$size = GetImageSize($upfile); // Read the size
         
$width = $size[0];
         
$height = $size[1];
         
         
// Proportionally resize the image to the
          // max sizes specified above
         
         
$x_ratio = $max_width / $width;
         
$y_ratio = $max_height / $height;

          if( (
$width <= $max_width) && ($height <= $max_height) )
          {
              
$tn_width = $width;
              
$tn_height = $height;
          }
          elseif ((
$x_ratio * $height) < $max_height)
          {
              
$tn_height = ceil($x_ratio * $height);
              
$tn_width = $max_width;
          }
          else
          {
              
$tn_width = ceil($y_ratio * $width);
              
$tn_height = $max_height;
          }
    
// Increase memory limit to support larger files
    
    
ini_set('memory_limit', '32M');
    
    
// Create the new image!
    
$src = ImageCreateFromJpeg($upfile);
    
$dst = ImageCreateTrueColor($tn_width, $tn_height);
    
ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
    
ImageJpeg($dst);
// Destroy the images
ImageDestroy($src);
ImageDestroy($dst);
?>
mail at soylentgreens dot com
31-Mar-2005 04:37
How about this for cropping images...

<?php

$imgfile
= "img.jpg";
$cropStartX = 300;
$cropStartY = 250;
$cropW   = 200;
$cropH   = 200;

// Create two images
$origimg = imagecreatefromjpeg($imgfile);
$cropimg = imagecreatetruecolor($cropW,$cropH);

// Get the original size
list($width, $height) = getimagesize($imgfile);

// Crop
imagecopyresized($cropimg, $origimg, 0, 0, $cropStartX, $cropStartY, $width, $height, $width, $height);

// TODO: write code to save new image
// or, just display it like this:
header("Content-type: image/jpeg");
imagejpeg($cropimg);

// destroy the images
imagedestroy($cropimg);
imagedestroy($origimg);

?>
Coodiss at w3bbix dot net
16-Mar-2005 06:51
Heres a easy way to scale images to the <td> that they are in
*this is broken up so anyone can understand it :)

<?
$imageinfo
= getimagesize("images/picture.jpg");
         
$ix=$imageinfo[0];
$iy=$imageinfo[1];

$widthscale = $ix/175//<TD> WIDTH
$heightscale = $iy/175; //<TD> HEIGHT

if($widthscale < 1)
$nwidth = $ix*$widthscale;
else
$nwidth = $ix/$widthscale;

if(
$heightscale < 1)
$nheight = $iy*$heightscale;
else
$nheight = $iy/$heightscale;

?>
php dot net at dannysauer dot com
12-Feb-2005 05:23
Note that, if you're going to be a good programmer and use named constatnts (IMAGETYPE_JPEG) rather than their values (2), you want to use the IMAGETYPE variants - IMAGETYPE_JPEG, IMAGETYPE GIF, IMAGETYPE_PNG, etc.  For some reason, somebody made a horrible decision, and IMG_PNG is actually 4 in my version of PHP, while IMAGETYPE_PNG is 3.  It took me a while to figure out why comparing the type against IMG_PNG was failing...
sixzero4 at hotmail dot com
30-Nov-2004 05:33
This is just to add to the comment by robertks at hotmail dot com on
05-Mar-2003 12:12 regarding trying to derive the dimensions of a video file. The package referenced (http://www.getid3.org/) had been updated, and below is a script I use to get the size. You can get many other attributes of media files as well.

<?php
// include getID3() library (can be in a different directory if full path is specified)
 
include_once('getid3.php');
 
// Initialize getID3 engine
$getID3 = new getID3;

 
// File to get info from
 
$file_location = './your/path/to/file.mov';

// Get information from the file
 
$fileinfo = $getID3->analyze($file_location);
 
getid3_lib::CopyTagsToComments($fileinfo);
 
 
// Output results
if (!empty($fileinfo['video']['resolution_x'])) { echo '<p> video width: '.$fileinfo['video']['resolution_x'].'</p>'; }
if (!empty(
$fileinfo['video']['resolution_y'])) { echo '<p> video height: '.$fileinfo['video']['resolution_y'].'</p>'; }
?>

Hope that helps others looking for a function similar to getimagesize() for a video or media file.
Joshua
16-Aug-2004 09:26
If your image name has spaces in it you will need to use rawurlencode() and NOT urlencode() as this function (at least in 4.3.4) does not accept spaces as + signs.
cstdenis at hotmail dot com
11-Aug-2004 08:42
This will not work for swf files unless zlib is compiled into php statically (not as a shared module). Bug #29611

As of PHP 5.0.0 it will just return false, but that should change to a notice by the next release.
ryan at vitalmodels dot com
05-Jun-2004 10:06
--- Editor's Note:
It's easier to call on urlencode() or rawurlencode() to "fix" urls containing spaces and other characters that normally not well-liked.
---

You may have noticed that images with spaces WONT work with getimagesize - some of us have massive amounts of pictures, or don't feel like rewriting file names on users uploaded pictures- so here is a super fast fix that will replace the spaces once the image is called and will work with getimagesize flawlessly-

$image_new = "/pictures/$pic[picture]";  //PICTURE URL
$image_new = str_replace(' ','%20',$image_new); //REPLACE THE SPACES

Now you just call $image_new using getimagesize and you wont' have anymore problems.

On my site I take uploaded pictures from users - then resize them if they are over a certain width, here is the script i use if anyone would like to do this-

$image_new = "/pictures/$pic[picture]"; //url of picture
$image_new = str_replace(' ','%20',$image_new); //take url and replace spaces
$max_width= "480";  //maximum width allowed for pictures
$resize_width= "480";  //same as max width
$size = getimagesize("$image_new");    //get the actual size of the picture
$width= $size[0];           // get width of picture
$height= $size[1];   // get height of picture
if ($width>$max_width){
            $new_width=$resize_width;  // Resize Image If over max width
}else {
            $new_width=$width;       // Keep original size from array because smaller than max

}

echo "<IMG src=\"$image_new\" border=1  width=$new_width>"   //print image with new width

Hope this helps anyone who wants some simple uses for getimagesize- check out my website to see it in action- vitalmodels.com
diablx at hotmail dot com
25-May-2004 11:36
I'm sorry for they other scripts, but I made one mistake about the image resizing... here is a working script !
<?
   
// Some configuration variables !
   
$maxWidth = 90;
   
$maxHeight = 90;
   
$maxCols = 8;
   
$webDir = "https://localhost/images/";
   
$localDir = $_SERVER['DOCUMENT_ROOT']."/images/";

   
$AutorisedImageType = array ("jpg", "jpeg", "gif", "png");
?>

<center>
<table border='1' cellspacing='5' cellpadding='5' style="border-collapse:collapse; border-style: dotted">
<tr>
   <?
  
// Open localDir
  
$dh = opendir($localDir);
   while (
false !== ($filename = readdir($dh))) {
      
$filesArray[] = $filename;
   }

  
// Display and resize
  
foreach ($filesArray as $images) {
  
      
$ext = substr($images, strpos($images, ".")+1, strlen($images));
      
       if(
in_array($ext, $AutorisedImageType) ) {

           list(
$width, $height, $type, $attr) = @getimagesize( $localDir.$images );

           
$xRatio = $maxWidth / $width;
           
$yRatio = $maxHeight / $height;
           
            if ( (
$width <= $maxWidth) && ($height <= $maxHeight) ) {
             
$newWidth = $width;
             
$newHeight = $height;
            }
            else if ((
$xRatio * $height) < $maxHeight) {
             
$newHeight = ceil($xRatio * $height);
             
$newWidth = $maxWidth;
            }
            else {
             
$newWidth = ceil($yRatio * $width);
             
$newHeight = $maxHeight;
            }
          
 &nb