博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习笔记-php图像简单完美剪裁-2016.4.7
阅读量:4318 次
发布时间:2019-06-06

本文共 3060 字,大约阅读时间需要 10 分钟。

file = $_SERVER['DOCUMENT_ROOT'].$file; list($this->width,$this->height,$this->type) = getimagesize($this->file); $this->img = $this->getType($this->file,$this->type); } /****************************************/ /* * 图像剪裁三:固定长高,等比列,对图像裁剪,扩容,修剪 * */ public function thumb($new_width = 0,$new_height = 0){//为避免不没有传值,所以我们初始化了新宽度和和高度 //另外这里需要一个判断 if(empty($new_width) && empty($new_height)){
$new_width = $this->width; $new_height = $this->height; } //如果传递过来的值不是数字而是字母或者其他,我们也需要进行处理 if(!is_numeric($new_width) || !is_numeric($new_height)){
$new_width = $this->width; $new_height = $this->height; } //固定生成图像的宽和高 $n_w = $new_width; $n_h = $new_height; //初始化裁剪点 $cut_w = 0; $cut_h = 0; //判断原始图像的宽和高 if ($this->width < $this->height) { //如果原始图像的宽比他的高度小 //让长度和新高度等比例 $new_width = ($new_height / $this->height) * $this->width; //新的宽度等于新的高度除以原来的高度再乘以原来的宽度 //公式解释:在等比例的裁剪中,我们首先要找到等比例的因子,就是按照什么样的比例来进行缩放的 //如果款比高小,那我们就用新的高度,除以老的高度,得到一个等比例的百分数,然后乘以元来的宽度等于新的宽度 //例如:原来的是500*1000 ,设定的宽和高为150 * 50 //那么新的宽度等于 (50/1000)*500 }else{
//让新高度和新长度等比例 $new_height = ($new_width / $this->width) * $this->height; } //这里我们需要通过另外一个小方法,寻找合适的裁剪点,如下: if ($new_width < $n_w) {
//如果新高度小于新容器高度 $r = $n_w / $new_width; //按长度求出等比例因子 $new_width *= $r; //扩展填充后的长度 $new_height *= $r; //扩展填充后的高度 $cut_height = ($new_height - $n_h) / 2;//这里一定要用等比例后新的高度度减去容器的高度除以二得到剪裁的点 //求出裁剪点的高度 } if ($new_height < $n_h) {
//如果新高度小于容器高度 $r = $n_h / $new_height; //按高度求出等比例因子 $new_width *= $r; // //扩展填充后的长度 $new_height *= $r; // //扩展填充后的高度 $cut_width = ($new_width - $n_w) / 2;//这里一定要用等比例后新的宽度减去容器的宽度除以二得到剪裁的点 //求出裁剪点的长度 } $this->new = imagecreatetruecolor($n_w,$n_h); //创建剪裁后的图像 imagecopyresampled($this->new,$this->img,0,0,0,0,$new_width,$new_height,$this->width,$this->height); } //判断图像类型,然后加载图像资源 private function getType($file,$type){
$img = ''; switch($type){
case 1: $img = imagecreatefromgif($file); break; case 2: $img = imagecreatefromjpeg($file); break; case 3: $img = imagecreatefrompng($file); break; default: Tool::alertBack('请上传图片类型为gif,jpg,png的文件!'); } return $img; } //图像输出 public function out(){
imagepng($this->new,$this->file);//输出 imagedestroy($this->img);//销毁资源 imagedestroy($this->new);//销毁 } }

转载于:https://www.cnblogs.com/lanxiaoyu/p/5361949.html

你可能感兴趣的文章
学习进度
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>
第五天站立会议内容
查看>>
CentOs7安装rabbitmq
查看>>
(转))iOS App上架AppStore 会遇到的坑
查看>>
解决vmware与主机无法连通的问题
查看>>
做好产品
查看>>
项目管理经验
查看>>
笔记:Hadoop权威指南 第8章 MapReduce 的特性
查看>>
JMeter响应数据出现乱码的处理-三种解决方式
查看>>