当前位置: 365bet亚洲官方投注 > 编程知识 > 正文

修正thinkphp缩略图源码365bet亚洲官方投注

时间:2019-12-22 07:16来源:编程知识
Thinkphp自定义生成缩略图尺寸的方法,本实例中生成两张不同尺寸的图片:第一张是大图350*350,第二张50*50的缩略图 本文实例讲述了Thinkphp调用Image类生成缩略图的方法。分享给大家供大

Thinkphp自定义生成缩略图尺寸的方法,本实例中生成两张不同尺寸的图片:第一张是大图350*350,第二张 50*50的缩略图

本文实例讲述了Thinkphp调用Image类生成缩略图的方法。分享给大家供大家参考。具体分析如下:

最近做项目 遇到个问题  就是用thinkphp的缩略图类 生成缩略图  比如我要生成230,230的 但是实际上Thinkphp提供的缩略图处理类是等比例截取的 不是按大小严格截取的,所以如果原图比例和你的缩略图比例不一致 可能会出现宽度或者高度略小的情况。

Image类是Thinkphp系统自带的,可以研究下,这个缩略图类很强大

Thinkphp的Image类 在ThinkPHP/Extend/Library/ORG/Util/Image.class.php中。

我想要的效果是 一定要缩略图的高度和宽度相等  少掉的部分 用白色背景填充   于是开始分析 他们的上传类 
ORG.Net.UploadFile

function getLogo($logo, $width, $height, $name) { $fileArr = pathinfo; $dirname = $fileArr['dirname']; $filename = $fileArr['filename']; $extension = $fileArr['extension']; $logo_rs = ""; if ($width > 0 && $height > 0) { $name_thumb = $dirname . "/" . $filename . "_" . $width . "_" . $height . "." . $extension; if (!file_exists { if  { $image = new ThinkImage(); $image->open; $image->thumb->save; } else { $name_thumb = ""; } } if  { $logo_rs = $name_thumb; } } else { $logo_rs = $logo; } if  { if  { return ""; } else { return __APP__ . "/" . $logo_rs; } } }
import;$Img = new Image();//实例化图片类对象$image_path = './图片路径';//若当前php文件在Thinkphp的中APP_PATH路径中//'./'就是index.php的上一级文件。//因为APP_PATH是通过index.php定义和加载的。$image_info = $Img::getImageInfo;//获取图片信息

UploadFile   这里类 里面 添加了一个属性  是否设置固定比例的 缩略图 

模版自定义缩略图高度和宽度:生成350*350的缩略图,其它尺寸同理

getImageInfo方法会获取图片的width,height,type,size,mime等信息。

 

总结

参数需要img_path,thumb_name,thumb_type,Max_height:

//是否使用固定缩略图      public $is_fixed = false;  

以上所述是小编给大家介绍的Thinkphp自定义生成缩略图尺寸的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

//生成缩略图:$Img::thumb2($img_path,$thumb_name,$thumb_type,$Max_width,$Max_height);

 

需要注意的是,缩略图的宽和高不能比原图的大,不然就会生成失败

 然后 找到生成缩略图的部分 179行  最后加上  $this->is_fixed

希望本文所述对大家的php程序设计有所帮助。

Image::thumb($filename,$thumbname,'',$thumbWidth[$i],$thumbHeight[$i],true,$this->is_fixed);  

 打开 缩略图类ORG.Util.Image
找到生成缩略图方法  修改为 thumb方法  我修改的部分都添加上了注释

 

/**        +----------------------------------------------------------       * 生成缩略图        +----------------------------------------------------------       * @static       * @access public        +----------------------------------------------------------       * @param string $image  原图       * @param string $type 图像格式       * @param string $thumbname 缩略图文件名       * @param string $maxWidth  宽度       * @param string $maxHeight  高度       * @param string $position 缩略图保存目录       * @param boolean $interlace 启用隔行扫描       * @param boolean $is_fixed  是否生成固定比例的缩略图        +----------------------------------------------------------       * @return void        +----------------------------------------------------------       */      static function thumb($image, $thumbname, $type='', $maxWidth=200, $maxHeight=50, $interlace=true,$fixed = false) {                // 获取原图信息          $info = Image::getImageInfo($image);          if ($info !== false) {              $srcWidth = $info['width'];              $srcHeight = $info['height'];              $type = empty($type) ? $info['type'] : $type;              $type = strtolower($type);              $interlace = $interlace ? 1 : 0;              unset($info);              $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例              if ($scale >= 1) {                  // 超过原图大小不再缩略                  $width = $srcWidth;                  $height = $srcHeight;              } else {                  // 缩略图尺寸                  $width = (int) ($srcWidth * $scale);                  $height = (int) ($srcHeight * $scale);              }                // 载入原图              $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type);              $srcImg = $createFun($image);                //创建缩略图              if ($type != 'gif' && function_exists('imagecreatetruecolor'))              {                  $thumbImg = imagecreatetruecolor($width, $height);              }else{                  $thumbImg = imagecreate($width, $height);              }                                      /* 开始判断是否生成固定高宽的缩略图               * 作者:过往云烟               * 日期:2012-06-25               */              if($fixed){                       //创建个   固定的缩略图盒子              $thumbImg = imagecreatetruecolor($maxWidth,$maxHeight);              //盒子 背景色                                       $padColor = imagecolorallocate($thumbImg,255,255,255);              //盒子填充   box              imagefilledrectangle($thumbImg,0,0,$maxWidth,$maxHeight,$padColor);                                                                     //$imgWidth == $srcWidth   $srcHeight                  //$width = $maxWidth    $height = $maxHeight                  if($srcWidth >= $srcHeight)                  {                      $thumbWidth  = $maxWidth;                      $thumbHeight = ($maxWidth / $srcWidth) * $srcHeight;                  }                  else                  {                      $thumbWidth  = ($maxHeight / $srcHeight) * $srcWidth;                      $thumbHeight = $maxHeight;                  }                                  if(function_exists('ImageCopyResampled')){                                       //生成固定比例的缩略图                      imagecopyresampled($thumbImg, $srcImg, ($maxWidth-$thumbWidth)/2, ($maxHeight-$thumbHeight)/2, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);                                                      }else{                      imagecopyresized($thumbImg, $srcImg, ($maxWidth-$thumbWidth)/2, ($maxHeight-$thumbHeight)/2, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);                  }                }else{                                   //如果不要固定生成 就还是按照他们以前的搞                  // 复制图片   如果有 imagecopyresampled 函数的话 就用                  if (function_exists("ImageCopyResampled"))                  {                      imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);                                        }else{                      imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);                  }                                                }                                  if ('gif' == $type || 'png' == $type) {                  $background_color = imagecolorallocate($thumbImg, 0, 255, 0);  //  指派一个绿色                  imagecolortransparent($thumbImg, $background_color);  //  设置为透明色,若注释掉该行则输出绿色的图              }                // 对jpeg图形设置隔行扫描              if ('jpg' == $type || 'jpeg' == $type)                  imageinterlace($thumbImg, $interlace);                // 生成图片              $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type);              $imageFun($thumbImg, $thumbname);              imagedestroy($thumbImg);              imagedestroy($srcImg);              return $thumbname;          }          return false;      }  

 这样就可以 了  最后在调用的时候 添加上这一句话就行了 

$upload = new UploadFile();// 实例化上传类  $upload->is_fixed = true;    //固定高宽  

 

最终效果

 

365bet亚洲官方投注 1

 

至此  thinkphp  就支持等比例缩放 和固定缩放了    搞了半天搞出来了  顺便记录在日志里

过往云烟 2012/06/25

 

 


编辑:编程知识 本文来源:修正thinkphp缩略图源码365bet亚洲官方投注

关键词: