imagecopyresized

(PHP 3, PHP 4, PHP 5)

imagecopyresized -- 拷贝部分图像并调整大小

说明

bool imagecopyresized ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

imagecopyresized() 将一幅图像中的一块正方形区域拷贝到另一个图像中。dst_imagesrc_image 分别是目标图像和源图像的标识符。如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。本函数可用来在同一幅图内部拷贝(如果 dst_imagesrc_image 相同的话)区域,但如果区域交迭的话则结果不可预知。

注: 因为调色板图像限制(255+1 种颜色)有个问题。重采样或过滤图像通常需要多于 255 种颜色,计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时,如果失败我们选择了计算结果最接近(理论上)的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果,例如空白(或者视觉上是空白)的图像。要跳过这个问题,请使用真彩色图像作为目标图像,例如用 imagecreatetruecolor() 创建的。

范例

例子 1. 调整图像大小

本例将以原来的一半大小显示图像。

<?php
// File and new size
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb);
?>

图像将以一半大小输出,不过可以用 imagecopyresampled() 得到更好的质量。


add a note add a note User Contributed Notes
06madsenl at westseneca dot wnyric dot org
21-Apr-2006 09:05
I was fiddling with this a few days trying to figure out how to resize the original images on my website, but this site:

http://www.sitepoint.com/article/image-resizing-php

Has a great tutorial on using PHP to resize images without creating thumbnails.  It was exactly what I was looking to do.
konteineris at yahoo dot com
16-Feb-2006 10:42
Function creates a thumbnail from the source image, resizes it so that it fits the desired thumb width and height or fills it grabbing maximum image part and resizing it, and lastly writes it to destination

<?

function thumb($filename, $destination, $th_width, $th_height, $forcefill)
{   
   list(
$width, $height) = getimagesize($filename);

  
$source = imagecreatefromjpeg($filename);

   if(
$width > $th_width || $height > $th_height){
    
$a = $th_width/$th_height;
    
$b = $width/$height;

     if((
$a > $b)^$forcefill)
     {
        
$src_rect_width  = $a * $height;
        
$src_rect_height = $height;
         if(!
$forcefill)
         {
          
$src_rect_width = $width;
          
$th_width = $th_height/$height*$width;
         }
     }
     else
     {
        
$src_rect_height = $width/$a;
        
$src_rect_width  = $width;
         if(!
$forcefill)
         {
          
$src_rect_height = $height;
          
$th_height = $th_width/$width*$height;
         }
     }

    
$src_rect_xoffset = ($width - $src_rect_width)/2*intval($forcefill);
    
$src_rect_yoffset = ($height - $src_rect_height)/2*intval($forcefill);

    
$thumb  = imagecreatetruecolor($th_width, $th_height);
    
imagecopyresized($thumb, $source, 0, 0, $src_rect_xoffset, $src_rect_yoffset, $th_width, $th_height, $src_rect_width, $src_rect_height);

    
imagejpeg($thumb,$destination);
   }
}

?>
jesse at method studios
05-Oct-2005 03:07
imagecopyresized() does not do any resampling.  This makes it extremely quick.  If quality is an issue, use imagecopyresampled().
MaLaZ
12-Aug-2005 10:24
simple script for creating thumbnails with process information and saving original ratio thumbnail to new destination...good then useing with upload or uploaded images:

<?php

//Upload------------------------------------
if(isset( $submit ))
{
if (
$_FILES['imagefile']['type'] == "image/jpeg"){
  
copy ($_FILES['imagefile']['tmp_name'], "../images/".$_FILES['imagefile']['name'])
   or die (
"Could not copy");
       echo
"";
       echo
"Image Name: ".$_FILES['imagefile']['name']."";
       echo
"<br>Image Size: ".$_FILES['imagefile']['size']."";
       echo
"<br>Image Type: ".$_FILES['imagefile']['type']."";
       echo
"<br>Image Copy Done....<br>";
       }
         else {
           echo
"<br><br>";
           echo
"bad file type (".$_FILES['imagefile']['name'].")<br>";exit;
             }
//-----upload end

//------start thumbnailer

  
$thumbsize=120;
   echo
"Thumbnail Info: <br>
         1.Thumb defined size: - OK: $thumbsize<br>"
;
  
$imgfile = "../images/$imagefile_name";//processed image
  
echo "
         2.Image destination: - OK: $imgfile<br>"
;
  
header('Content-type: image/jpeg');
   list(
$width, $height) = getimagesize($imgfile);
   echo
"3.Image size - OK: W=$width x H=$height<br>";
  
$imgratio=$width/$height;
   echo
"3.Image ratio - OK: $imgratio<br>";
   if (
$imgratio>1){
    
$newwidth = $thumbsize;
    
$newheight = $thumbsize/$imgratio;}
   else{
    
$newheight = $thumbsize;
    
$newwidth = $thumbsize*$imgratio;}
   echo
"4.Thumb new size -OK: W=$newwidth x H=$newheight<br>";
  
$thumb = ImageCreateTrueColor($newwidth,$newheight);
   echo
"5.TrueColor - OK<br>";
  
$source = imagecreatefromjpeg($imgfile);
   echo
"6.From JPG - OK<br>";
  
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  
imagejpeg($thumb,"../images/thumbs/thumb_$imagefile_name",100);echo "7.Done... - OK<br>";
//-----------end--------------   
?>

or without any info, just resizing:

<?php
//------start thumbnailer
  
$thumbsize=120;
  
$imgfile = "../images/$imagefile_name";
  
header('Content-type: image/jpeg');
   list(
$width, $height) = getimagesize($imgfile);
  
$imgratio=$width/$height;
   if (
$imgratio>1){
    
$newwidth = $thumbsize;
    
$newheight = $thumbsize/$imgratio;}
   else{
    
$newheight = $thumbsize;
    
$newwidth = $thumbsize*$imgratio;}
  
$thumb = ImageCreateTrueColor($newwidth,$newheight);
  
$source = imagecreatefromjpeg($imgfile);
  
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($thumb,"../images/thumbs/thumb_$imagefile_name",100);
//-----------end-------------- 
?>

i hope it helps.
FearINC at gmail dot com
11-Aug-2005 01:35
I wrote a function not long ago that creates a thumbnail out of a large picture. Unlike other notes on this page, the code is a function so it can be used many times on the same script. The function allows the programer to set max height and width and resizes the picture proportionally.
<?php
function saveThumbnail($saveToDir, $imagePath, $imageName, $max_x, $max_y) {
  
preg_match("'^(.*)\.(gif|jpe?g|png)$'i", $imageName, $ext);
   switch (
strtolower($ext[2])) {
       case
'jpg' :
       case
'jpeg': $im  = imagecreatefromjpeg ($imagePath);
                     break;
       case
'gif' : $im  = imagecreatefromgif  ($imagePath);
                     break;
       case
'png' : $im  = imagecreatefrompng  ($imagePath);
                     break;
       default    :
$stop = true;
                     break;
   }
  
   if (!isset(
$stop)) {
      
$x = imagesx($im);
      
$y = imagesy($im);
  
       if ((
$max_x/$max_y) < ($x/$y)) {
          
$save = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x));
       }
       else {
          
$save = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y));
       }
      
imagecopyresized($save, $im, 0, 0, 0, 0, imagesx($save), imagesy($save), $x, $y);
      
      
imagegif($save, "{$saveToDir}{$ext[1]}.gif");
      
imagedestroy($im);
      
imagedestroy($save);
   }
}
?>

the function for now takes only jpg,gif and png files, but that can easily be changed.
It's an easy to use easy to understand function and I hope it will come useful to someone.
mecdesign at hotmail dot com
08-Aug-2005 05:51
This code will resize your images if your image needs to fit (without stretching) into a max height / width destination image that is not a 1:1 ratio (mine was 4:3).

<?
  
// Ratios
  
$image_ratio = $width / $height; // Actual image's ratio
  
$destination_ratio = $max_width / $max_height; // Ratio of dest. placeholder
  
   // Taller
  
if($image_ratio < $destination_ratio)
   {
      
//Too tall:
      
if($height > $max_height)
       {
          
$height = $max_height;
          
$width = ceil($height / $image_ratio);
       }
   }
  
// Wider / balanced & too wide:
  
else if ($width > $max_width)
   {
      
$width = $max_width;
      
$height = ceil($width / $image_ratio);
   }
?>
saurabh at saurabh dot com
22-Jul-2005 07:57
URGENT!

I am trying to make thumbnails of image(png, jpg, gif)...

Not a single code is working. Do we have to make any changes in php.ini?

which version of gd is required can anybody xplain me whole thing.
brian <dot> tyler <at> gmail <dot> com
12-Jun-2005 06:53
I spent last night getting unsuccessful results from this function until I found this note of fluffle <<at>> gmail on the imagecopyresampled page, I have made a slight modification, so you can just cut and paste.

Just to clarify that src_w and src_h do not necessarily need to be the source image width and height, as they specify the size of the rectangle cropped from the source picture, with its top left corner situated at (src_x, src_y).

For example, the code below crops a jpeg image to be square, with the square situated in the centre of the original image, and then resizes it to a 100x100 thumbnail.

function ($image_filename, $thumb_location, $image_thumb_size){
//@$image_filename - the filename of the image you want
//to get a thumbnail for (relative to location of this
//function).
//@$thumb_location - the url (relative to location of this
//function) to save the thumbnail.
//@$image_thumb_size - the x-y dimension of your thumb
//in pixels.

   list($ow, $oh) = getimagesize($image_filename);
   $image_original = imagecreatefromjpeg($image_filename);
   $image_thumb = imagecreatetruecolor($image_thumb_size,$image_thumb_size);
if ($ow > $oh) {
   $off_w = ($ow-$oh)/2;
   $off_h = 0;
   $ow = $oh;
} elseif ($oh > $ow) {
   $off_w = 0;
   $off_h = ($oh-$ow)/2;
   $oh = $ow;
} else {
   $off_w = 0;
   $off_h = 0;
}
imagecopyresampled($image_thumb, $image_original, 0, 0, $off_w, $off_h, 100, 100, $ow, $oh);

imagejpeg($image_thumb, $thumb_location);
}//end function
no at name dot com
18-May-2005 07:45
I was searching for script, that do not resize on the fly, but copy resized file to other place, so after long searches, i've done this function. I hope it will be usefull for someone:
(This is not original code, i'v taked it from somwhere and edited a ltl :)
<?php
function resize($cur_dir, $cur_file, $newwidth, $output_dir)
{
  
$dir_name = $cur_dir;
  
$olddir = getcwd();
  
$dir = opendir($dir_name);
  
$filename = $cur_file;
  
$format='';
   if(
preg_match("/.jpg/i", "$filename"))
   {
      
$format = 'image/jpeg';
   }
   if (
preg_match("/.gif/i", "$filename"))
   {
      
$format = 'image/gif';
   }
   if(
preg_match("/.png/i", "$filename"))
   {
      
$format = 'image/png';
   }
   if(
$format!='')
   {
       list(
$width, $height) = getimagesize($filename);
      
$newheight=$height*$newwidth/$width;
       switch(
$format)
       {
           case
'image/jpeg':
          
$source = imagecreatefromjpeg($filename);
           break;
           case
'image/gif';
          
$source = imagecreatefromgif($filename);
           break;
           case
'image/png':
          
$source = imagecreatefrompng($filename);
           break;
       }
      
$thumb = imagecreatetruecolor($newwidth,$newheight);
      
imagealphablending($thumb, false);
      
$source = @imagecreatefromjpeg("$filename");
      
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      
$filename="$output_dir/$filename";
       @
imagejpeg($thumb, $filename);
   }
}
?>
call this function using
<?
resize
("./input folder", "picture_file_name", "width", "./output folder");
?>
del at kartoon dot net
05-May-2005 04:37
This snippet allows you to grab a thumbnail from the center of a large image.  This was used for a client photo gallery for art to give a teaser of the image to come (only a small portion).  You could get dynamic with this value.  I also put in a scaling factor in case you want to scale down first before chopping.

<?php
// The file
$filename = 'moon.jpg';
$percent = 1.0; // if you want to scale down first
$imagethumbsize = 200; // thumbnail size (area cropped in middle of image)
// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($imagethumbsize , $imagethumbsize);  // true color for best quality
$image = imagecreatefromjpeg($filename);

// basically take this line and put in your versin the -($new_width/2) + ($imagethumbsize/2) & -($new_height/2) + ($imagethumbsize/2) for
// the 2/3 position in the 3 and 4 place for imagecopyresampled
// -($new_width/2) + ($imagethumbsize/2)
// AND
// -($new_height/2) + ($imagethumbsize/2)
// are the trick
imagecopyresampled($image_p, $image, -($new_width/2) + ($imagethumbsize/2), -($new_height/2) + ($imagethumbsize/2), 0, 0, $new_width , $new_width , $width, $height);

// Output

imagejpeg($image_p, null, 100);
?>
development at lab-9 dot com
26-Apr-2005 06:35
If you read your Imagedata from a Database Blob and use the functions from above to resize the image to a thumbnail improving a lot of traffic, you will have to make temporary copies of the files in order that the functions can access them

Here a example:

// switch through imagetypes
$extension = "jpg";
if(mysql_result($query, 0, 'type') == "image/pjpeg")
{ $extension = "jpg"; } // overwrite
else if(mysql_result($query, 0, 'type') == "image/gif")
{ $extension = "gif"; } // overwrite

// get a temporary filename
// use microtime() to get a unique filename
// if you request more than one file f.e. by creating large numbers of thumbnails, the server could be not fast enough to save all these different files and you get duplicated copies and resizepics() will resize and output often the same content

$filename = microtime()."_temp.".$extension;

// open
$tempfile = fopen($filename, "w+");

// write
fwrite($tempfile, mysql_result($query, 0, 'image'));

// close
fclose($tempfile);

// resize and output the content
echo resizepics($filename, '100', '70');

// delete temporary file
unlink($filename);

NOTE: this script has to be put into a file which sends correct header informations to the browser, otherwise you won't get more to see than a big red cross :-)
robby at planetargon dot com
28-Feb-2005 11:56
Most of the examples below don't keep the proportions properly. They keep using if/else for the height/width..and forgetting that you might have a max height AND a max width, not one or the other.

/**
* Resize an image and keep the proportions
* @author Allison Beckwith <allison@planetargon.com>
* @param string $filename
* @param integer $max_width
* @param integer $max_height
* @return image
*/
function resizeImage($filename, $max_width, $max_height)
{
   list($orig_width, $orig_height) = getimagesize($filename);

   $width = $orig_width;
   $height = $orig_height;

   # taller
   if ($height > $max_height) {
       $width = ($max_height / $height) * $width;
       $height = $max_height;
   }

   # wider
   if ($width > $max_width) {
       $height = ($max_width / $width) * $height;
       $width = $max_width;
   }

   $image_p = imagecreatetruecolor($width, $height);

   $image = imagecreatefromjpeg($filename);

   imagecopyresampled($image_p, $image, 0, 0, 0, 0,
                                     $width, $height, $orig_width, $orig_height);

   return $image_p;
}
haker4o at haker4o dot org
27-Feb-2005 12:57
<?php
//                      Resize image.
//            Writeen By: Smelban & Haker4o
// Mails smelban@smwebdesigns.com & Haker4o@Haker4o.org
// This code is written to only execute on  jpg,gif,png     
// $picname = resizepics('pics', 'new widthmax', 'new heightmax');
// Demo  $picname = resizepics('stihche.jpg', '180', '140');
$picname = resizepics('picture-name.format', '180', '140');
echo
$pickname;
//Error
die( "<font color=\"#FF0066\"><center><b>File not exists :(<b></center></FONT>");
//Funcion resizepics
function resizepics($pics, $newwidth, $newheight){
     if(
preg_match("/.jpg/i", "$pics")){
          
header('Content-type: image/jpeg');
     }
     if (
preg_match("/.gif/i", "$pics")){
          
header('Content-type: image/gif');
     }
     list(
$width, $height) = getimagesize($pics);
     if(
$width > $height && $newheight < $height){
      
$newheight = $height / ($width / $newwidth);
     } else if (
$width < $height && $newwidth < $width) {
      
$newwidth = $width / ($height / $newheight);   
     } else {
      
$newwidth = $width;
      
$newheight = $height;
   }
   if(
preg_match("/.jpg/i", "$pics")){
  
$source = imagecreatefromjpeg($pics);
   }
   if(
preg_match("/.jpeg/i", "$pics")){
  
$source = imagecreatefromjpeg($pics);
   }
   if(
preg_match("/.jpeg/i", "$pics")){
  
$source = Imagecreatefromjpeg($pics);
   }
   if(
preg_match("/.png/i", "$pics")){
  
$source = imagecreatefrompng($pics);
   }
   if(
preg_match("/.gif/i", "$pics")){
  
$source = imagecreatefromgif($pics);
   }
  
$thumb = imagecreatetruecolor($newwidth, $newheight);
  
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   return
imagejpeg($thumb);
   if(
preg_match("/.jpg/i", "$pics")){
   return
imagejpeg($thumb);
   }
   if(
preg_match("/.jpeg/i", "$pics")){
   return
imagejpeg($thumb);
   }
   if(
preg_match("/.jpeg/i", "$pics")){
   return
imagejpeg($thumb);
   }
   if(
preg_match("/.png/i", "$pics")){
   return
imagepng($thumb);
   }
   if(
preg_match("/.gif/i", "$pics")){
   return
imagegif($thumb);
   }
 }
?>
smelban at smwebdesigns dot com
16-Feb-2005 12:37
Resize image proportionaly where you give a max width or max height

<?php
header
('Content-type: image/jpeg');
//$myimage = resizeImage('filename', 'newwidthmax', 'newheightmax');
$myimage = resizeImage('test.jpg', '150', '120');
print
$myimage;

function
resizeImage($filename, $newwidth, $newheight){
   list(
$width, $height) = getimagesize($filename);
   if(
$width > $height && $newheight < $height){
      
$newheight = $height / ($width / $newwidth);
   } else if (
$width < $height && $newwidth < $width) {
      
$newwidth = $width / ($height / $newheight);   
   } else {
      
$newwidth = $width;
      
$newheight = $height;
   }
  
$thumb = imagecreatetruecolor($newwidth, $newheight);
  
$source = imagecreatefromjpeg($filename);
  
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   return
imagejpeg($thumb);
}
?>
finnsi at centrum dot is
13-Feb-2005 09:30
If you need to delete or resize images in the filesystem (not in DB) without loosing the image quality...
I commented the code as much as possible so that newbies (like myself) will understand it.  ;)

<?php
  
  
/*
  
   WRITTEN BY:
   Finnur Eiriksson, (http://www.centrum.is/finnsi)
   Based on snippets that have been posted on www.PHP.net
   Drop me an e-mail if you have any questions.
  
   NOTE:
   This code is written to either delete or resize pictures in the file system, so if you have your pictures in a database
   you will have to make some changes. Also, if you are using other picture formats than .gif's or .jpg's you
   will have to add som code as well (Read the comments to find out where to do this).
  
   IMPORTANT:   
   The $_GET['resizepic'] variable only contains the NAME of the file that is going to be deleted/resized.
  
   The internet guest account (IUSR_SERVERNAME on WINDOWS) must have read and write permissions (execution permission not needed)
   in your image directory (i.e. $dir_name = "FooBar"). It is a good idea to have a separate directory for images that users
   can upload to and manipulate the contents. Ideally, you should have one directory for the pictures that are used for the website,
   and another upload directory
  
   */
    
  
$dir_name = "FooBar"// Enter the name of the directory that contains the images
  
$olddir = getcwd();  // Get the Current Windows Directory to be able to switch back in the end of the script
  
$dir = opendir($dir_name); //make a directory handle
   //To delete a picture
  
if(isset($_GET['delpic'])){
      
chdir('images');
      
$delpic = $_GET['delpic'];
       @
unlink($delpic);
      
chdir($olddir);
   }
  
//To resize a picture
  
if(isset($_GET['resize'])){
      
//$_GET['resize'] contains the resize-percentage (for example 80 and 40, for 80% and 40% respectively. To double the image in size the user enters 200 etc.)
       // File and new size
      
$percent = ($_GET['resize']/100);
      
chdir('images');// change the windows directory to the image directory
      
$filename = $_GET['resizepic'];
              
      
// Decide the content type, NB:This code is written to only execute on .gif's and .jpg's
       // If you want other formats than .gif's and .jpg's add your code here, in the same manner:
      
$format='';
       if(
preg_match("/.jpg/i", "$filename")){
          
$format = 'image/jpeg';
          
header('Content-type: image/jpeg');
       }
       if (
preg_match("/.gif/i", "$filename")){
          
$format = 'image/gif';
          
header('Content-type: image/gif');
       }
       if(
$format!=''){  //This is where the actual resize process begins...
           // Get new sizes
          
list($width, $height) = getimagesize($filename);
          
$newwidth = $width * $percent;
          
$newheight = $height * $percent;
          
          
// Load the image
          
switch($format){
               case
'image/jpeg':
                  
$source = imagecreatefromjpeg($filename);
               break;
               case
'image/gif';
                  
$source = imagecreatefromgif($filename);
               break;
           }
          
//Get the Image
          
$thumb = imagecreatetruecolor($newwidth,$newheight);
          
//This must be set to false in order to be able to overwrite the black
           //pixels in the background with transparent pixels. Otherwise the new
           //pixels would just be applied on top of the black background.
          
imagealphablending($thumb, false);
          
//Make a temporary file handle
          
$source = @imagecreatefromjpeg($filename);
          
// Resize
          
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
          
//Write the image to the destination file
          
@imagejpeg($thumb, $filename);
          
//Change back to the old directory... I'm not sure that this is neccessary
          
chdir($olddir);
          
//Specify where you want the user to go after the operation:
          
header('Location: foobar.php');
       }
   }
      
      
?>
thomas at dermueller dot com
11-Feb-2005 05:23
Just in addition to the script posted by marcy DOT xxx (AT) gmail.com:

There is one error in this script, that's why it didn't work for me.

Instead of this line:
$source = @function_image_create($imgfile);

use this line:
$source = @$function_image_create($imgfile);
marcy DOT xxx (AT) gmail.com
03-Jan-2005 03:06
This example allow to use every kind of image and to resize images with ImageCopyResized(), maintaining proportions..

<?php
// switch to find the correct type of function

$imgfile = 'namefile.jpg';
Header("Content-type: image/".$_GET["type"]);

switch(
$_GET["type"]){
default:
  
$function_image_create = "ImageCreateFromJpeg";
  
$function_image_new = "ImageJpeg";
break;
case
"jpg":
  
$function_image_create = "ImageCreateFromJpeg";
  
$function_image_new = "ImageJpeg";
case
"jpeg":
  
$function_image_create = "ImageCreateFromJpeg";
  
$function_image_new = "ImageJpeg";
break;
case
"png":
  
$function_image_create = "ImageCreateFromPng";
  
$function_image_new = "ImagePNG";
break;
case
"gif":
  
$function_image_create = "ImageCreateFromGif";
  
$function_image_new = "ImagePNG";
break;
}

list(
$width, $height) = getimagesize($imgfile);

// the new weight of the thumb

$newheight = 80;

// Proportion is maintained

$newwidth = (int) (($width*80)/$height);

$thumb = ImageCreateTrueColor($newwidth,$newheight);
$source = @function_image_create($imgfile);

ImageCopyResized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

@
$function_image_new($thumb);
?>
backglancer at hotmail
14-Dec-2004 11:10
Neat script to create a thumbnails no larger than 150 (or user-specific) height AND width.

<?PHP
$picture
="" # picture fileNAME here. not address
$max=150;    # maximum size of 1 side of the picture.
/*
here you can insert any specific "if-else",
or "switch" type of detector of what type of picture this is.
in this example i'll use standard JPG
*/

$src_img=ImagecreateFromJpeg($picture);

$oh = imagesy($src_img);  # original height
$ow = imagesx($src_img);  # original width

$new_h = $oh;
$new_w = $ow;

if(
$oh > $max || $ow > $max){
      
$r = $oh/$ow;
      
$new_h = ($oh > $ow) ? $max : $max*$r;
      
$new_w = $new_h/$r;
}
// note TrueColor does 256 and not.. 8
$dst_img = ImageCreateTrueColor($new_w,$new_h);

ImageCopyResized($dst_img, $src_img, 0,0,0,0, $new_w, $new_h, ImageSX($src_img), ImageSY($src_img));

ImageJpeg($dst_img, "th_$picture");

?>
skurrilo at skurrilo dot de
28-Nov-2000 11:36
If you aren't happy with the quality of the resized images, just give ImageMagick a try. (http://www.imagemagick.org) This is a commandline tool for converting and viewing images.