PHP图片缩略图 已测试2014-11-19 19:16:32

( 5人已投票,[高质量] )
分享: ╬收藏
31.3K

PHP生成缩略图的应用情况比较普遍,图片展示,介绍说明,如果不用缩略图的话,加载速度波动将可能比较大。

下面我就弄个等比压缩缩略图处理方法,代码如下:

/*
*  PHP缩略图生成
*  等比压缩
*  支持格式Gif/Jpeg/Png 
*/
function makeThumbnail($srcImgPath,$targetImgPath,$targetW=10,$targetH=10,$bDengbi=true){
     $imgSize = GetImageSize($srcImgPath);
     $imgType = $imgSize[2];
     //使函数不向页面输出错误信息
     switch ($imgType)
    {
      case 1:
        $srcImg = @ImageCreateFromGIF($srcImgPath);
        break;
      case 2:
        $srcImg = @ImageCreateFromJpeg($srcImgPath);
        break;
      case 3:
        $srcImg = @ImageCreateFromPNG($srcImgPath);
        break;
    }
     //取源图象的宽高
    $srcW = ImageSX($srcImg);
    $srcH = ImageSY($srcImg);
    if($srcW>$targetW || $srcH>$targetH)
    {
      if($bDengbi){//等比压缩
        if($targetW>10){//定宽
          $targetH = $srcH*$targetW/$srcW;
        }else if($targetH>10){//定高
          $targetW = $srcW*$targetH/$srcH;
        }else{
        return false;
        }
        if($targetH<11 ||$targetW<11) return false;
      }//end
      $targetX = 0;
      $targetY = 0;
      if ($srcW > $srcH)
      {
        $finaW=$targetW;
        $finalH=round($srcH*$finaW/$srcW);
        $targetY=floor(($targetH-$finalH)/2);
      }
      else
      {
        $finalH=$targetH;
        $finaW=round($srcW*$finalH/$srcH);
        $targetX=floor(($targetW-$finaW)/2);
      }
       //function_exists 检查函数是否已定义
       //ImageCreateTrueColor 本函数需要GD2.0.1或更高版本
      if(function_exists("ImageCreateTrueColor"))
      {
        $targetImg=ImageCreateTrueColor($targetW,$targetH);
      }
      else
       {
        $targetImg=ImageCreate($targetW,$targetH);
      }
      $targetX=($targetX<0)?0:$targetX;
      $targetY=($targetX<0)?0:$targetY;
      $targetX=($targetX>($targetW/2))?floor($targetW/2):$targetX;
      $targetY=($targetY>($targetH/2))?floor($targetH/2):$targetY;
      //背景颜色默认白色
      $white = ImageColorAllocate($targetImg, 255,255,255);
      ImageFilledRectangle($targetImg,0,0,$targetW,$targetH,$white);
      /*
          PHP的GD扩展提供了两个函数来缩放图象:
          ImageCopyResized 在所有GD版本中有效,其缩放图象的算法比较粗糙,可能会导致图象边缘的锯齿。
          ImageCopyResampled 需要GD2.0.1或更高版本,其像素插值算法得到的图象边缘比较平滑,
                               该函数的速度比ImageCopyResized慢。
      */
      if(function_exists("ImageCopyResampled"))
      {
        ImageCopyResampled($targetImg,$srcImg,$targetX,$targetY,0,0,$finaW,$finalH,$srcW,$srcH);
      }
      else
      {
        ImageCopyResized($targetImg,$srcImg,$targetX,$targetY,0,0,$finaW,$finalH,$srcW,$srcH);
      }
       switch ($imgType) {
        case 1:
          ImageGIF($targetImg,$targetImgPath);
          break;
        case 2:
          ImageJpeg($targetImg,$targetImgPath);
          break;
        case 3:
          ImagePNG($targetImg,$targetImgPath);
          break;
      }
      ImageDestroy($srcImg);
      ImageDestroy($targetImg);
    }
     else //不超出指定宽高则直接复制
    {
      copy($srcImgPath,$targetImgPath);
      ImageDestroy($srcImg);
    }
   }
$path = "http://snowcoal.com/IMAGES_3739/201411/14163238356719.jpg";
//调用方式
//三种调用方式:等比
$newPath = "./14163677618267.jpg";
makeThumbnail($path,$newPath,200,200,false);//指定宽高 等比白边填充,不会变形
$newPath = "./14163677618268.jpg";
makeThumbnail($path,$newPath,200,0,true);  //等比 定宽
$newPath = "./14163677618269.jpg";
makeThumbnail($path,$newPath,0,200,true);  //等比 定高


实际运行效果:

PHP图片缩略图 已测试

--------------------------------------------------------------------


PHP图片缩略图 已测试







头像

snowcoal
  • PHP
  • 缩略图

本文标签:

PHP缩略图

收藏到我的私密空间

标题:PHP图片缩略图 已测试

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限