您好,欢迎访问一九零五行业门户网

php生成图片缩略图,支持png透明,_PHP教程

php生成图片缩略图,支持png透明,注:此功能依赖gd2图形库
最近要用php生成缩略图,在网上找了一下,发现了这篇文章:php生成图片缩略图
试用了一下后,发现有这样几个问题:
1、png图片生成的缩略图是jpg格式的
2、png图片生成的缩略图没有了透明(半透明)效果(填充了黑色背景)
3、代码语法比较老
因此,在这个版本的基础上简单修改优化了一下。
php生成缩略图类srcimg = $imgpath; $this->resize_width = $width; $this->resize_height = $height; $this->cut = $iscut; //图片的类型 $this->type = strtolower(substr(strrchr($this->srcimg,.),1)); //初始化图象 $this->initi_img(); //目标图象地址 $this -> dst_img($savepath); //-- $this->width = imagesx($this->im); $this->height = imagesy($this->im); //生成图象 $this->newimg(); imagedestroy ($this->im); } private function newimg() { //改变后的图象的比例 $resize_ratio = ($this->resize_width)/($this->resize_height); //实际图象的比例 $ratio = ($this->width)/($this->height); if($this->cut) { //裁图 $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height); if($this->type==png) { imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127)); } if($ratio>=$resize_ratio) { //高度优先 imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height); } else { //宽度优先 imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width)/$resize_ratio)); } } else { //不裁图 if($ratio>=$resize_ratio) { $newimg = imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio); if($this->type==png) { imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127)); } imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, ($this->resize_width)/$ratio, $this->width, $this->height); } else { $newimg = imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height); if($this->type==png) { imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127)); } imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio, $this->resize_height, $this->width, $this->height); } } if($this->type==png) { imagesavealpha($newimg, true); imagepng ($newimg,$this->dstimg); } else { imagejpeg ($newimg,$this->dstimg); } } //初始化图象 private 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); } } //图象目标地址 private 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; } }?>
使用使用时,直接调用类的构造函数即可,构造函数如下:
$resizeimage = new resizeimage($imgpath, $width, $height, $iscut, $savepath);
参数$imgpath:原图片地址
$width:缩略图宽
$height:缩略图高
$iscut:是否裁剪,bool值
$savepath:缩略图地址(可以跟原图片地址相同)
示例
效果
http://www.bkjia.com/phpjc/910350.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/910350.htmltecharticlephp生成图片缩略图,支持png透明, 注:此功能依赖gd2图形库 最近要用php生成缩略图,在网上找了一下,发现了这篇文章: php生成图片缩略...
其它类似信息

推荐信息