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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
php图片的二进制转换实现方法
Dec 15 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
php检查页面是否被百度收录
Oct 28 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
PHP生成图表pChart的示例解析
Jul 31 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
linux iconv方法的使用
2011/10/01 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python语法快速入门指南
2015/10/12 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
Python中format()格式输出全解
2019/04/12 Python
python日志logging模块使用方法分析
2019/05/23 Python
python生成器用法实例详解
2019/11/22 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
毕业生实习鉴定
2013/12/11 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
作弊检讨书
2015/01/27 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
SQL Server实现分页方法介绍
2022/03/16 SQL Server