PHP生成等比缩略图类和自定义函数分享


Posted in PHP onJune 25, 2014

共有两种等比例缩略图方法可以借鉴
一、为类文件,实例化之后即可使用
二、为自定义方法,比较轻巧

类文件

$resizeimage = new resizeimage("./shawn.jpg", "200", "100", "0","../pic/shawnsun.jpg");

//实例化下面的类,就能生成缩略图

//其中,源文件和缩略图地址可以相同,200,100分别代表宽和高,第四个参数为可选 0不截图,1为截图

<?php

class resizeimage{

 

    //图片类型

    public $type;

    //实际宽度

    public $width;

    //实际高度

    public $height;

    //改变后的宽度

    public $resize_width;

    //改变后的高度

    public $resize_height;

    //是否裁图

    public $cut;

    //源图象

    public $srcimg;

    //目标图象地址

    public $dstimg;

    //临时创建的图象

    public $im;

     

    function resizeimage($img, $wid, $hei,$c,$dstpath){

     

          $this--->srcimg = $img;

          $this->resize_width = $wid;

          $this->resize_height = $hei;

          $this->cut = $c;

     

          //图片的类型

          $this->type = strtolower(substr(strrchr($this->srcimg,"."),1));

          //初始化图象

          $this->initi_img();

          //目标图象地址

          $this->dst_img($dstpath);

          //W & H

          $this->width  = imagesx($this->im);

          $this->height = imagesy($this->im);

          //生成图象

          $this->newimg();

          ImageDestroy ($this->im);

     }

     

    function newimg(){

     

        //改变后的图象的比例

        $resize_ratio = ($this->resize_width)/($this->resize_height);

        //实际图象的比例

        $ratio = ($this->width)/($this->height);

         

        if(($this->cut)=="1")

        //裁图

        {

            if($ratio>=$resize_ratio)

            //高度优先

            {

                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, 

                                   $this->resize_height, (($this->height)*$resize_ratio), 

                                   $this->height

                );

                ImageJpeg ($newimg,$this->dstimg);

            }

            if($ratio<$resize_ratio)

            //宽度优先

            {

                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, 

                                   $this->resize_height, $this->width, 

                                   (($this->width)/$resize_ratio)

                );

                ImageJpeg ($newimg,$this->dstimg);

            }

              }

        else

        //不裁图

        {

            if($ratio>=$resize_ratio)

            {

                $newimg = imagecreatetruecolor($this->resize_width,

                                               ($this->resize_width)/$ratio

                );

                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, 

                                   ($this->resize_width)/$ratio, $this->width, 

                                   $this->height

                );

                ImageJpeg ($newimg,$this->dstimg);

            }

            if($ratio<$resize_ratio)

            {

                $newimg = imagecreatetruecolor(($this->resize_height)*$ratio,

                                                $this->resize_height

                );

                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, 

                                   ($this->resize_height)*$ratio, 

                                   $this->resize_height, $this->width, 

                                   $this->height

                );

                ImageJpeg ($newimg,$this->dstimg);

            }

        }

   }

     

    //初始化图象

    function initi_img(){

 

        if($this->type=="jpg")

        {

            $this->im = imagecreatefromjpeg($this->srcimg);

        }

        if($this->type=="gif")

        {

            $this->im = imagecreatefromgif($this->srcimg);

        }

        if($this->type=="png")

        {

            $this->im = imagecreatefrompng($this->srcimg);

        }

    }

    //图象目标地址

    function dst_img($dstpath){

     

        $full_length  = strlen($this->srcimg);

        $type_length  = strlen($this->type);

        $name_length  = $full_length-$type_length;

 

        $name = substr($this->srcimg,0,$name_length-1);

        $this->dstimg = $dstpath;

 

        //echo $this->dstimg;

    }

}

 

?>

自定义方法

thumbs('shawn.jpg','shawnsun.jpg',100,100);

//参数属性类似于方法一
<?php

 

function thumbs($FileName,$SaveTo,$SetW,$SetH){

    $IMGInfo= getimagesize($FileName);

    if(!$IMGInfo) return false;

         

    if($IMGInfo['mime']== "image/pjpeg" || $IMGInfo['mime']=="image/jpeg"){

        $ThisPhoto= imagecreatefromjpeg($FileName);

    }elseif($IMGInfo['mime']== "image/x-png" || $IMGInfo['mime']== "image/png"){

        $ThisPhoto= imagecreatefrompng($FileName);   

    }elseif($IMGInfo['mime']== "image/gif"){

        $ThisPhoto=imagecreatefromgif($FileName); 

    } 

     

    $width=$IMGInfo[0];

    $height=$IMGInfo[1];   

    $scalc = max($width/$SetW,$height/$SetH);

    $nw = intval($width/$scalc);

    $nh = intval($height/$scalc);

    echo "缩略大小:w$nw,h$nh <br /-->";

     

    if($SetW-$nw == 1){$nw = $SetW;}

    if($SetH-$nh == 1){$nh = $SetH;}

    echo "+修正1像素: w$nw,h$nh<br>";

     

    //补宽

    if($SetW-$nw > 0){

        $nh = $nh +(($nh/$nw) * ($SetW-$nw));

        echo "*需补宽".($SetW-$nw).",陪补高".(($nh/$nw) * ($SetW-$nw))."  <br>";  

        $nw = $SetW;

    }

    //补高

    if($SetH-$nh > 0){

        $nw = $nw + (($nw/$nh) * ($SetH-$nh));

        echo "*需补高".($SetH-$nh).",陪补宽". (($nw/$nh) * ($SetH-$nh)) ."<br>";

        $nh = $SetH;

    }

    $nw = intval($nw);

    $nh = intval($nh);

    echo "+修正大小:w$nw,h$nh<br>";

     

    $px = ($SetW - $nw)/2;

    $py = ($SetH - $nh)/2;

    echo "窗口大小:w$SetW,h$SetH <br>";

    echo "+偏移修正:x$px,y$py <br>";

     

    $NewPhoto=imagecreatetruecolor($SetW,$SetH);

    imagecopyresized($NewPhoto,$ThisPhoto,$px,$py,0,0,$nw,$nh,$width,$height);

    ImageJpeg ($NewPhoto,$SaveTo);

    return true;

}

     

?>
PHP 相关文章推荐
PHP 类型转换函数intval
Jun 20 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
YII路径的用法总结
Jul 09 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
php实现文件预览功能
May 23 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 #PHP
PHP内置过滤器FILTER使用实例
Jun 25 #PHP
PHP生成图片验证码、点击切换实例
Jun 25 #PHP
PHP生成随机密码类分享
Jun 25 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 #PHP
JavaScript创建命名空间的5种写法
Jun 24 #PHP
You might like
基于php缓存的详解
2013/05/15 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
PHP中串行化用法示例
2016/11/16 PHP
php上传excel表格并获取数据
2017/04/27 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Node.js学习入门
2017/01/03 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
python转换摩斯密码示例
2014/02/16 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
大学生活学习的自我评价
2013/12/03 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
安全目标管理责任书
2014/07/25 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
领导班子整改方案
2014/10/25 职场文书
2014年度培训工作总结
2014/11/27 职场文书
小班下学期幼儿评语
2014/12/30 职场文书