- <?php
- /**
- * 缩略图生成类,使用示例:
- *634381967@qq.com
- *http://www.bcty365.com
- */
- /*
- $newimage=new ImageResize();
- $newimage->resize("1.jpg","1_lit.jpg",644,373);
- echo $newimage->GetLastError();
- */
- class ImageResize{
- private $localimage;//原图路径
- private $remoteimage;//缩略图保存路径
- private $localinfo;//原图属性
- private $error;
- function resize($localimg, $remoteimg, $x, $y) {
- //检测是否支持gd图像处理
- if(!$this->_checkenv()){
- return false;
- }
- $this->localimage = $localimg;
- $this->remoteimage = $remoteimg;
- $this->localinfo = getimagesize($this->localimage); //获取本地图像的信息
- return $this->_resize($x,$y);
- }
- /**
- * 检测当前环境是否支持GD
- */
- private function _checkenv(){
- $gd_info=gd_info();
- if(!$gd_info){
- $this->error[]="当前环境不支持GD图像处理,请先安装GD库并开启PHP相关扩展";
- return false;
- }
- return true;
- }
- /**
- * 生成缩略图主函数
- * @param int $x 指定的缩略图宽度
- * @param int $y 指定的缩略图高度
- * @return boolean
- */
- private function _resize($x,$y){
- if(!$this->localinfo){
- $this->error[]="本地图像文件不存在";
- return false;
- }
- //创建图像句柄
- $im=@$this->_create($this->localinfo[2]);
- if(!$im){
- $this->error[]="当前GD库不支持图像类型:{$this->localinfo['mime']}";
- return false;
- }
- $dstsize=$this->_dstsize($x, $y);
- $dstim=@imagecreatetruecolor($dstsize["width"],$dstsize["height"]);
- $whitecolor=@imagecolorallocatealpha($dstim, 0, 0, 0,127);
- imagefill($dstim,0,0,$whitecolor);
- $re=@imagecopyresampled($dstim, $im, 0, 0, 0, 0, $dstsize["width"], $dstsize["height"], $this->localinfo[0], $this->localinfo[1]);
- if(!$re){
- $this->error[]="图像重新采样失败";
- return false;
- }
- if(!imagejpeg($dstim, $this->remoteimage)){
- if(!imagepng($dstim,$this->remoteimage)){
- if(!imagegif($dstim,$this->remoteimage)){
- $this->error[]="保存缩略图到{$this->remoteimage}失败,请检查gd环境是否正常和缩略图文件夹的写入权限。";
- return false;
- }
- }
- }
- $this->error[]="success";
- return true;
- }
- /**
- * 根据本地图片类型,创建图片资源
- * @param 图像类型代码 $code
- * @return resource/boolean 成功则返回resourse失败则返回false
- */
- private function _create($code){
- $src=$this->localimage;
- switch ($code){
- case 1:
- return imagecreatefromgif($src);
- break;
- case 2:
- return imagecreatefromjpeg($src);
- break;
- case 3:
- return imagecreatefrompng($src);
- break;
- default :
- return false;
- break;
- }
- }
- /**
- * 按比例计算合适的宽度
- * @param int $x 指定的缩略图宽度
- * @param int $y 指定的缩略图高度
- * @return array 包含调整后的缩略图宽度和高度
- */
- private function _dstsize($x,$y){
- list($srcwidth,$srcheight)=$this->localinfo;
- if(($srcwidth/$srcheight)<($x/$y)){
- $x=floor($y*$srcwidth/$srcheight);
- }else{
- $y=floor($x*$srcheight/$srcwidth);
- }
- $dstsize["width"]=$x;
- $dstsize["height"]=$y;
- return $dstsize;
- }
- /**
- * 获取最后一条错误信息
- * return string
- */
- function GetLastError(){
- return array_pop($this->error);
- }
- /**
- * 获取所有错误信息
- * return array
- */
- function GetAllError(){
- return $this->error;
- }
- }
- <?php
- header("Content-type: text/html; charset=utf-8");
- include_once 'ImageResize.class.php';
- //实例化缩略图类
- $newimage = new ImageResize();
- //将当前目录下的test.jpg生成缩略图并保存到test_400_400.jpg,指定的宽度高度分别是400和400像素
- $newimage->resize("demo.jpg", "demo_400_400.jpg", 400, 400);
- $newimage->resize("demo.jpg", "demo_200_200.jpg", 200, 200);
- $newimage->resize("demo.jpg", "demo_50_50.jpg", 50, 50);
- //获取最后一条错误信息,如果生成成功则输出'success'
- echo "<p style='color:red;font-weight:bold;text-align:center;font-size:16px;margin:50px 0 20px'>结果:".$newimage->GetLastError()."</p>";
- ?>
类下载:ImageResize.zip