学习笔记-php图像简单完美剪裁-2016.4.7

<?php/** * Created by PhpStorm. * User: 兰小宇 * Date: 2016/3/30 * Time: 23:08 *///图像处理类class Image{    private $file;          //图像地址    private $width;         //获取图像的宽度    private $height;        //获取图像的高度    private $type;          //获取图像的类型    private $img;           //原来图像的资源句柄    private $new;           //新的资源句柄    //构造方法    public function __construct($file){        $this->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);//销毁    }}
时间: 2024-10-08 20:50:22

学习笔记-php图像简单完美剪裁-2016.4.7的相关文章

学习笔记-php图像等比例剪裁-2016.4.7

因为小区附近宽带升级,所以笔记暂时没有更新,但是学习一直继续!今天继续, <?php/** * Created by PhpStorm. * User: 兰小宇 * Date: 2016/3/30 * Time: 23:08 *///图像处理类class Image{ private $file; //图像地址 private $width; //获取图像的宽度 private $height; //获取图像的高度 private $type; //获取图像的类型 private $img; /

学习笔记-php图像加水印组合图像简单完美剪裁-2016.4.7

<?php/** * Created by PhpStorm. * User: 兰小宇 * Date: 2016/3/30 * Time: 23:08 *///图像处理类class Image{ private $file; //图像地址 private $width; //获取图像的宽度 private $height; //获取图像的高度 private $type; //获取图像的类型 private $img; //原来图像的资源句柄 private $new; //新的资源句柄 //构

图像编程学习笔记6——图像转置

转置(transpose)是指将x,y坐标对换,图2.2的转置如图2.15所示. 图2.2 图2.15   图2.2的转置 要注意的是,转置和旋转900是有区别的,不信你可以试试:怎么旋转,图2.2也转不出图2.15来.另外,转置后图的宽高对换了.转置的变换矩阵很简单: (2.12) 镜象变换的源代码如下,因为和旋转的那段程序很类似,程序中的注释就简单一些: 由于很多代码和之前的重复,所以只给出主要功能代码(win32 控制台程序) [cpp] view plaincopy void trans

图像编程学习笔记5——图像镜像

以下文字内容copy于<<数字图像处理编程入门>>,code为自己实现,是win32控制台程序. 镜象(mirror)分水平镜象和垂直镜象两种.图2.2的水平镜象和垂直镜象分别如图2.13和图2.14所示 图2.13   图2.2的水平镜象 图2.14   图2.2的垂直镜象 镜象的变换矩阵很简单.设原图宽为w,高为h,变换后,图的宽和高不变. 水平镜象的变化矩阵为: (2.10) 垂直镜象的变化矩阵为: (2.11) 镜象变换的源代码如下,因为和平移的那段程序很类似,程序中的注释

图像编程学习笔记7——图像缩放

假设放大因子为ratio,(为了避免新图过大或过小,我们在程序中限制0.25≤ratio≤4),缩放(zoom)的变换矩阵很简单: (2.13) 缩放变换的源代码如下,因为和转置的那段程序很类似,程序中的注释就简单一些. [cpp] view plaincopy /** * 函数名: zoom * 参  数: ratio -- 缩放率 * 功  能: 对图片进行水平和垂直镜像操作 *         只保存原图大小的图像数据,如果没有就用白色填充 */ void zoom(double rati

图像编程学习笔记8——图像的平滑(去噪)

第一种方法:高斯模版 以下文字内容copy于<<数字图像处理编程入门>>,code为自己实现,是win32控制台程序. 先举个例子说明一下什么是平滑(smoothing),如下面两幅图所示:可以看到,图3.2比图3.1柔和一些(也模糊一些).是不是觉得很神奇?其实实现起来很简单.我们将原图中的每一点的灰度和它周围八个点的灰度相加,然后除以9,作为新图中对应点的灰度,就能实现上面的效果. 这么做并非瞎蒙,而是有其道理的.大概想一想,也很容易明白.举个例子,就象和面一样,先在中间加点水

[简明python教程]学习笔记之编写简单备份脚本

[[email protected] 0503]# cat backup_ver3.py #!/usr/bin/python #filename:backup_ver3.py import os import time #source source=['/root/a.sh','/root/b.sh','/root/c.sh'] #source='/root/c.sh' #backup dir target_dir='/tmp/' today=target_dir+time.strftime('

OpenCV2学习笔记:图像的读取与显示

1. 图像读取:imread() Mat imread(const string& ?lename, int ?ags=1 ) 参数介绍: filename: 待加载的文件名称. flags: 此标志用来指定被加载图像的颜色类型(color type).这个标志的取值可以有: -- CV_LOAD_IMAGE_ANYDEPTH : 如果设置这个标志的话,如果图像为16位或32位深度的图像,则返回对应深度的图像:否则,将图像转换为8位深度图像再返回. -- CV_LOAD_IMAGE_COLOR

图像编程学习笔记9——图像的锐化

锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high passfilter).锐化处理在增强图象边缘的同时增加了图象的噪声. 常用的锐化模板是拉普拉斯(Laplacian)模板(见(3.4)式),又是个数学家的名字,可见学好数学,走遍天下都不怕. (3.4) 容易看出拉普拉斯模板的作法:先将自身与周围的8个象素相减,表示自身与周围象素的差别:再将这个差别加上自身作为新象素的灰度.可见,如果一片暗区出现了一个亮点,那么锐化处理的结果是这个