/**
* PHP生成缩略图
* @param $basepath /原文件地址
* @param $des_w /缩略图的宽
* @param $des_h /缩略图的高
* @param $style /规则名称
* @param $line /连接符
* @param int $save / 展示方式 0展示缩略图(默认) 1保存缩略图
* @return string
*/
function thumb($basepath, $des_w, $des_h, $style, $line, $save = 0)
{
if(!file_exists($basepath)) {
return 'file not exists';
}
$fileExt = substr(basename($basepath), strrpos(basename($basepath), '.'));
$file = basename(basename($basepath), $fileExt);
$fileinfo = getimagesize($basepath);
$src_w = $fileinfo[0];
$src_h = $fileinfo[1];
$type = $fileinfo[2];
$type_array = [1=> 'gif', 2=> 'jpeg', 3=> 'png'];
$type_str = $type_array[$type];//jpeg

$fun_str = 'imagecreatefrom';
$function = $fun_str.$type_str;//imagecreatefromjpeg
//原图片资源
$src_img = $function($basepath);

$srcAvg = round($src_w / $src_h, 1);
if($des_h == 0 && $des_w != 0) {
//固定宽
$des_width = $des_w;
$des_height = round($des_w / $srcAvg);
} elseif ($des_w == 0 && $des_h != 0) {
//固定高
$des_height = $des_h;
$des_width = round($des_height * $srcAvg);
} elseif ($des_w == 0 && $des_h == 0) {
//原图
$des_width = $src_w;
$des_height = $src_h;
} elseif ($des_w != 0 && $des_h != 0) {
$des_width = $des_w;
$des_height = $des_h;
}
$des_img = imagecreatetruecolor($des_width, $des_height);
imagecopyresampled($des_img, $src_img, 0, 0, 0, 0, $des_width, $des_height, $src_w, $src_h);

$thumb = 'image'.$type_str;//imagejpeg
if($save) {
//保存缩略图
$filename = dirname($basepath) . '/' . $file.$line.$style.$fileExt;//保存
$thumb($des_img, $filename);
} else {
header('Content-type: image/'. $type_str .'');
$thumb($des_img);//展示图片
}
imagedestroy($des_img);
imagedestroy($src_img);
if($save) {
return $filename;
} else {
return true;
}
}

php 缩略图封装的方法的更多相关文章

  1. php使用GD库实现图片水印和缩略图——封装成类

    学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...

  2. js封装的方法

    1.JS封装就是尽量把使用的方式简单化,内部逻辑和使用解耦.通俗的说就是使用的时候只需要知道参数和返回值,其他条件尽量不要使用人员进行设置. 2.JS封装的方法有函数方式.对象的方式.闭包的方式. 举 ...

  3. Visual Studio快速封装字段方法

    在面向对象的编程中我们常常要将各个字段封装为属性,但是当字段多的时候往往这个重复的操作会大大降低我们的开发效率,那么如何才能快速的封装字段呢?下面就给大家2个解决方法: 1.使用封装字段方法: 选中字 ...

  4. 关于tween.js 封装的方法

    今天做的是匀速情况下div的运动.首先开始之前先了解运动的原理 A------------>>BA移动到B 这段距离是总距离 用一个变量保存下来:var dA移动到B 移动的总次数  用一 ...

  5. xml方式封装数据方法

    1.xml方式封装数据方法 2.demo <?php xml方式封装数据方法 /** * [xmlEncode description] * @param [type] $code [descr ...

  6. Kong管理UI -kong-dashboard (附kong封装webservice方法)

    本文仍然是在centos 6.7的环境下进行                 本文转载请注明出处 —— xiaoEight btw如果要正常使用管理UI,前提为kong已经正常run(可参考)起来,此 ...

  7. angular 封装公共方法

    angular封装公共方法到service中间件,节省开发时间 layer.service.ts openAlert(callback) {// 传递回调函数 const dialogRef = th ...

  8. ASP组件AspJpeg(加水印)生成缩略图等使用方法

    ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出 ...

  9. jsonp跨域 封装通用方法

    jsonp跨域 封装通用方法 //用法如下 jsonp({ url:"https://www.xxxx.com", params:{wd:'b'}, callback:'show' ...

随机推荐

  1. 循序渐进VUE+Element 前端应用开发(23)--- 基于ABP实现前后端的附件上传,图片或者附件展示管理

    在我们一般系统中,往往都会涉及到附件的处理,有时候附件是图片文件,有时候是Excel.Word等文件,一般也就是可以分为图片附件和其他附件了,图片附件可以进行裁剪管理.多个图片上传管理,及图片预览操作 ...

  2. SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)

    前提:1.连接hadoop需要本地安装 winutils.exe 并在程序指定,不然程序会报错  IOException: HADOOP_HOME or hadoop.home.dir are not ...

  3. Excel基础—为什么学习Excel

    吾生也有涯,而知也无涯 点赞再看,养成习惯 自从个人计算机开始普及以后,Excel就得到了广泛的传播,工作学习生活中不处不存在Excel的影子,不论是考勤,工资还是其他的统计等等,都离不开Excel. ...

  4. SQL Server 列存储索引 第四篇:实时运营数据分析

    实时运营数据分析(real-time operational analytics )是指同时在同一张数据表上执行分析处理和业务处理.分析查询主要是对海量数据执行聚合查询,而事务主要是指对数据表进行少量 ...

  5. Java中final修饰的方法是否可以被重写

    这是一次阿里面试里被问到的题目,在我的印象中,final修饰的方法是不能被子类重写的.如果在子类中重写final修饰的方法,在编译阶段就会提示Error.但是回答的时候还是有点心虚的,因为final变 ...

  6. python数据类型互相转换

    类型转换 关注公众号"轻松学编程"了解更多. 主要针对几种存储工具:list.tuple.dict.set 特殊之处:dict是用来存储键值对的. 1.list 转换为set l1 ...

  7. Lock接口之Condition接口

    之前在写显示锁的是后,在显示锁的接口中,提到了new Condition这个方法,这个方法会返回一个Condition对象 简单介绍一下 Condition接口: 任意一个Java对象,都拥有一组监视 ...

  8. 重要 | Spark和MapReduce的对比,不仅仅是计算模型?

    [前言:笔者将分上下篇文章进行阐述Spark和MapReduce的对比,首篇侧重于"宏观"上的对比,更多的是笔者总结的针对"相对于MapReduce我们为什么选择Spar ...

  9. VC获取文件后缀名

    VC获取文件后缀名 2011-07-28 10:30:50|  分类: Visual C++ and O |  标签: |举报 |字号大中小 订阅     1. CString GetSuffix(C ...

  10. 响应式编程简介之:Reactor

    目录 简介 Reactor简介 reactive programming的发展史 Iterable-Iterator 和Publisher-Subscriber的区别 为什么要使用异步reactive ...