首页 › 程序设计 › php

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

泡在网上的日子 / 文 发表于2012-03-28 10:40 次阅读

用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);
 }

 

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

<?php

/*

*         $o_photo 原图路径

*         $d_photo 处理后图片路径

*         $width    定义宽

*         $height   定义高

*         调用方法   cutphoto("test.jpg","temp.jpg",256,146);

*/

 

function cutphoto($o_photo,$d_photo,$width,$height){

 

$temp_img = imagecreatefromjpeg($o_photo);

$o_width   = imagesx($temp_img);                                 //取得原图宽

$o_height = imagesy($temp_img);                                 //取得原图高

 

//判断处理方法

if($width>$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);

}

 

}

?>

 

收藏 赞 (2) 踩 (0)
上一篇:谈谈php中的mvc
其实我们每个人写软件的时候都在追求使用某种模式或框架的, 程序写到一个规模(不需要很大),你自然而然地会为了优化而整理其结构,比如说重复的代码会写成函数, 很多web程序都把同样的请求预处理放进common.php里.... 等等
下一篇:PHP :time(),date(),mktime()区别
PHP :time(),date(),mktime()日期与时间函数库{经常会忘却掉} checkdate : 验证日期的正确性。 date : 将服务器的时间格式化。 strftime : 将服务器的时间本地格式化。 getdate : 获得时间及日期信息。 gettimeofday : 取得目前时间。 gmdate : 取得目