使用 php的imagecopyresampled函数生成缩略图(控制图片大小)

用php生成缩略图经常被使用到,尤其是社区论坛里面生成用户头像,这里我写了一个能够产生缩略图的函数

函数的调用示例:

CreateImage('../'.$save_path, '../'.$BaseDir.$child_dir.'/'.$new_file_small, 128, 128);

CreateImage函数定义:

 function CreateImage($SrcImageUrl, $DirImageUrl, $Width, $Height)
 {
  $img;
  $srcw;
  $new_width;
  $srch;
  $new_height;
  // 图片类型
  $type = substr(strrchr($SrcImageUrl, "."), 1);
        // 初始化图像 
        if($type == "jpg") 
            $img = imagecreatefromjpeg($SrcImageUrl); 
        if($type == "gif") 
            $img = imagecreatefromgif($SrcImageUrl); 
        if($type == "png") 
            $img = imagecreatefrompng($SrcImageUrl);
  $srcw = imagesx($img);
  $srch = imagesy($img);
  if ($srcw / $srch > $Width / $Height)
  {
   if ($srcw > $Width)
   {
    $new_width = $Width;
    $new_height = $srch * ($Width / $srcw);
   }
   else
   {
    $new_width = $srcw;
    $new_height = $srch;
   }
  }
  else
  {
   if ($srch > $Height)
   {
    $new_height = $Height;
    $new_width = $srcw * ($Height / $srch);
   }
   else
   {
    $new_width = $srcw;
    $new_height = $srch;
   }
  }
  $new_image = imagecreatetruecolor($new_width, $new_height);
  imagecopyresampled($new_image, $img, 0, 0, 0, 0, $new_width, $new_height, $srcw, $srch);
  imagejpeg($new_image, $DirImageUrl);
  imagedestroy($img);
  imagedestroy($new_image);
 }

不过我在网上看到一个更好的代码:

$o_width || $height\>$o_height){         //原图宽或高比规定的尺寸小,进行压缩         $newwidth\=$o_width;          $newheight\=$o_height;          if($o_width\>$width){                  $newwidth\=$width;                  $newheight\=$o_height*$width/$o_width;          }          if($newheight\>$height){                  $newwidth\=$newwidth*$height/$newheight;                  $newheight\=$height;          }          //缩略图片          $new_img \= imagecreatetruecolor($newwidth, $newheight);          imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height);          imagejpeg($new_img , $d_photo);                          imagedestroy($new_img); }else{                                                                                 //原图宽与高都比规定尺寸大,进行压缩后裁剪          if($o_height*$width/$o_width\>$height){         //先确定width与规定相同,如果height比规定大,则ok                  $newwidth\=$width;                  $newheight\=$o_height*$width/$o_width;                  $x\=0;                  $y\=($newheight-$height)/2;          }else{                                                                         //否则确定height与规定相同,width自适应                  $newwidth\=$o_width*$height/$o_height;                  $newheight\=$height;                  $x\=($newwidth-$width)/2;                  $y\=0;          }          //缩略图片          $new_img \= imagecreatetruecolor($newwidth, $newheight);          imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height);          imagejpeg($new_img , $d_photo);                          imagedestroy($new_img);          $temp_img \= imagecreatefromjpeg($d_photo);          $o_width   \= imagesx($temp_img);                                 //取得缩略图宽          $o_height \= imagesy($temp_img);                                 //取得缩略图高          //裁剪图片          $new_imgx \= imagecreatetruecolor($width,$height);          imagecopyresampled($new_imgx,$temp_img,0,0,$x,$y,$width,$height,$width,$height);          imagejpeg($new_imgx , $d_photo);          imagedestroy($new_imgx); } } ?>