php 缩略图封装的方法
/**
* 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 缩略图封装的方法的更多相关文章
- php使用GD库实现图片水印和缩略图——封装成类
学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...
- js封装的方法
1.JS封装就是尽量把使用的方式简单化,内部逻辑和使用解耦.通俗的说就是使用的时候只需要知道参数和返回值,其他条件尽量不要使用人员进行设置. 2.JS封装的方法有函数方式.对象的方式.闭包的方式. 举 ...
- Visual Studio快速封装字段方法
在面向对象的编程中我们常常要将各个字段封装为属性,但是当字段多的时候往往这个重复的操作会大大降低我们的开发效率,那么如何才能快速的封装字段呢?下面就给大家2个解决方法: 1.使用封装字段方法: 选中字 ...
- 关于tween.js 封装的方法
今天做的是匀速情况下div的运动.首先开始之前先了解运动的原理 A------------>>BA移动到B 这段距离是总距离 用一个变量保存下来:var dA移动到B 移动的总次数 用一 ...
- xml方式封装数据方法
1.xml方式封装数据方法 2.demo <?php xml方式封装数据方法 /** * [xmlEncode description] * @param [type] $code [descr ...
- Kong管理UI -kong-dashboard (附kong封装webservice方法)
本文仍然是在centos 6.7的环境下进行 本文转载请注明出处 —— xiaoEight btw如果要正常使用管理UI,前提为kong已经正常run(可参考)起来,此 ...
- angular 封装公共方法
angular封装公共方法到service中间件,节省开发时间 layer.service.ts openAlert(callback) {// 传递回调函数 const dialogRef = th ...
- ASP组件AspJpeg(加水印)生成缩略图等使用方法
ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出 ...
- jsonp跨域 封装通用方法
jsonp跨域 封装通用方法 //用法如下 jsonp({ url:"https://www.xxxx.com", params:{wd:'b'}, callback:'show' ...
随机推荐
- viewPager删除缓存fragment
fragment结合viewpager会缓存fragment在内存,除非退出程序,想要不退出程序情况下刷新fragment页面,就要删除缓存; public class MainActivity ex ...
- vue学习笔记(六) ----- vue组件
一.模块化与组件化 模块化的定义 模块化在Node中是一个规范,定义一些模块的相关的规则,从代码角度上来说,方便做区别,如果不使用模块化,写在js文件中不利于后期维护和扩展,从代码的层面上就把相关的功 ...
- 【转】Event Driven Programming
FROM: http://lazyfoo.net/tutorials/SDL/03_event_driven_programming/index.php Event Driven Programmin ...
- python获取汉字首字母
获取汉字首字母 关注公众号"轻松学编程"了解更多. 应用场景之一:可用于获取名字首字母,在数据库中查询记录时,可以用它来排序输出. from pytz import unicode ...
- DP百题练(一)
目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG ...
- 快快使用ModelArts,零基础小白也能玩转AI!
摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...
- Angular2 初学小记
1.与Angular1的异同 几乎完全不同(什么鬼~ 1)保留一些特性 表达式仍旧用{{}}. 2)属性指令变为驼峰式 ng-if ---> ngIf 3)ng-repeat被ngFor代替 4 ...
- 面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如果你相信你做什么都能成,你会自信的多! 千万不要总自我否定,尤其是职场的打工人.如 ...
- 《我想进大厂》之Java基础夺命连环16问
说好了面试系列已经完结了,结果发现还是真香,嗯,以为我发现我的Java基础都没写,所以这个就算作续集了,续集第一篇请各位收好. 说说进程和线程的区别? 进程是程序的一次执行,是系统进行资源分配和调度的 ...
- reids 入门
1.reids 服务的安装有两种 1.1 exe文件安装,安装完成后,就直接在 "服务"列表中可以查看,并可以停止或启动 1.2 命令行安装:将文件解压至指定文件夹,CMD命令进入 ...