PHP图片生成缩略图

 

PHP代码
  1. <?php  
  2. class CImage{  
  3. /** 
  4.  * 生成缩略图 
  5.  * @param $srcFile (string)  参数说明:源文件路径 
  6.  * @param $size int 缩略图的大小,默认值150 
  7.  * @param $is_square bool 是否正方形,默认值false 
  8.  * @param $quality int 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约 75)。 
  9.  */  
  10. public function create_thumbnails($srcFile$dstFile$size = 150, $is_square = false, $quality = 75){  
  11.     if(file_exists($srcFile)){  
  12.         //返回含有4个单元的数组,0-宽,1-高,2-图像类型,3-宽高的文本描述。   
  13.         $data = getimagesize($srcFile);  
  14.         //将文件载入到资源变量im中   
  15.         switch ($data[2]){  //1-GIF,2-JPG,3-PNG    
  16.             case 1:  
  17.                 $im = imagecreatefromgif($srcFile);  
  18.                 break;  
  19.             case 2:  
  20.                 $im = imagecreatefromjpeg($srcFile);  
  21.                 break;  
  22.             case 3:  
  23.                 $im = imagecreatefrompng($srcFile);  
  24.                 break;  
  25.         }  
  26.         if(!$im){  
  27.             return false;  
  28.         }  
  29.         //设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息(与单一透明色相反)  
  30.         imagesavealpha($im, true);  
  31.         //  
  32.         $srcW = imagesx($im);  
  33.         $srcH = imagesy($im);  
  34.         $srcX = $srcY = 0;  
  35.         if($is_square == true){  
  36.             if($srcH >= $srcW){  
  37.                 $srcX = 0;  
  38.                 $srcY = floor(($srcH - $srcW) / 2);  
  39.                 $srcH = $srcW;  
  40.             }else {  
  41.                 $srcY = 0;  
  42.                 $srcX = floor(($srcW - $srcH) / 2);  
  43.                 $srcW = $srcH;  
  44.             }  
  45.             $fdstH = $fdstW = $size;  
  46.         } else {  
  47.             if ($srcW < $size && $srcH < $size) {  
  48.                 return false;  
  49.             }  
  50.             if ($srcH >= $srcW) {  
  51.                 $fdstH = $size;  
  52.                 $fdstW = $fdstH * $srcW / $srcH;  
  53.             } else {  
  54.                 $fdstW = $size;  
  55.                 $fdstH = $fdstW * $srcH / $srcW;  
  56.             }  
  57.         }  
  58.         $ni = imagecreatetruecolor($fdstW$fdstH);  
  59.         //关闭 alpha 渲染并设置 alpha 标志  
  60.         imagealphablending($ni, false);  
  61.         imagesavealpha($ni, true);  
  62.         //重采样拷贝部分图像并调整大小  
  63.         imagecopyresampled($ni$im, 0, 0, $srcX$srcY$fdstW$fdstH$srcW$srcH);  
  64.         switch ($data[2]){  
  65.             case 1:  
  66.                 imagegif($ni,$dstFile);  
  67.                 break;  
  68.             case 2:  
  69.                 imagejpeg($ni,$dstFile,$quality);  
  70.                 break;  
  71.             case 3:  
  72.                 imagepng($ni,$dstFile);  
  73.                 break;  
  74.         }  
  75.         imagedestroy($im);  
  76.         imagedestroy($ni);  
  77.     }  
  78.     return false;  
  79. }  
  80.   
  81. }  
  82. //$obj = new CImage();  
  83. //$res = $obj -> create_thumbnails('./old.jpg','./new.jpg');  
  84. //if($res) echo '成功生成缩略图';  
  85. //else echo '生成缩略图失败';  

 



评论: 0 | 引用: 0 | 查看次数: 396
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑