话不多说直接上代码:
<?php
/**
图片压缩操作类
*/
class Image
{
private $src;
private $imageinfo;
private $image;
public $percent = 0.1;
public function __construct($src)
{
$this->src = $src;
}
/**
打开图片
*/
public function openImage()
{
list($width, $height, $type, $attr) = getimagesize($this->src);
$this->imageinfo = array(
'width' => $width,
'height' => $height,
'type' => image_type_to_extension($type, false),
'attr' => $attr
);
$fun = "imagecreatefrom" . $this->imageinfo['type'];
$this->image = $fun($this->src);
}
/**
操作图片
*/
public function thumpImage()
{
$new_width = $this->imageinfo['width'] * $this->percent;
$new_height = $this->imageinfo['height'] * $this->percent;
$image_thump = imagecreatetruecolor($new_width, $new_height);
//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
if($this->imageinfo['type'] == "png"){
imagealphablending($image_thump, false);//关闭混合模式,以便透明颜色能覆盖原画板
imagesavealpha($image_thump, true);//设置保存PNG时保留透明通道信息
$bg = imagecolorallocatealpha($image_thump, 255, 255, 255,127);
imagefill($image_thump, 0, 0, $bg);
}
imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
imagedestroy($this->image);
$this->image = $image_thump;
}
/**
输出图片
*/
public function showImage()
{
header('Content-Type: image/' . $this->imageinfo['type']);
$funcs = "image" . $this->imageinfo['type'];
$funcs($this->image);
}
/**
保存图片到硬盘
*/
public function saveImage($dstImgName)
{
if(empty($dstImgName)) return false;
$funcs = "image".$this->imageinfo['type'];
$allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
$dstExt = strrchr($dstImgName ,".");
$sourseExt = strrchr($this->src ,".");
if(!empty($dstExt)) $dstExt =strtolower($dstExt);
if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
//有指定目标名扩展名
if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
$dstName = $dstImgName;
}elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
$dstName = $dstImgName.$sourseExt;
}else{
$dstName = $dstImgName.$this->imageinfo['type'];
}
if($this->imageinfo['type'] == "png"){
$funcs($this->image,$dstName,9);
}elseif ($this->imageinfo['type'] == "jpeg"){
$funcs($this->image,$dstName,25);
}else{
$funcs($this->image,$dstName);
}
}
/**
销毁图片
*/
public function __destruct()
{
imagedestroy($this->image);
}
}