PHP生成等比缩略图类和自定义函数分享
PHP生成等比缩略图类和自定义函数分享
发布时间:2016-12-29 来源:查字典编辑
摘要:共有两种等比例缩略图方法可以借鉴一、为类文件,实例化之后即可使用二、为自定义方法,比较轻巧类文件复制代码代码如下:$resizeimage=...

共有两种等比例缩略图方法可以借鉴

一、为类文件,实例化之后即可使用

二、为自定义方法,比较轻巧

类文件

复制代码 代码如下:$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教程学习
编程开发子分类