PHP5:图像缩小及格式转换CLASS
<?
/** * * 对图像进行缩小,也可对png,gif,jpeg,wbmp格式的图像进行转换 * 需要GD库的支持才可以,若要进行gif图像的输出需要GD2.0.28或更高版本才支持(或* gif的动画转了之后动画变成静画,不知为什么! * * @date 2004.08.16 * @author zhouxh#im.ac.cn * */ class ResizeImage { ? const ResizeImageInfo = "本类对图像进行缩小,也可对png,wbmp格式的图像进行转换"; ? //设置目标图像的宽和高 private $height = 100; private $width = 100; ? //源图像文件和目标图像文件,若只是输出至浏览器则目标图像文件可不设置 private $sourceFile = ''; private $dstFile = ''; ? //图像类型“image/gif、image/jpeg、image/png...” private $imgType; ? //源图像句柄和目标图像句柄 private $sim; private $dim; ? //是否保存图像,用public void saveFlag(boolean $flag)方法设置 private $saveFlag = true; ? function __construct() { if (!function_exists('imagecreate')) { throw new Exception('你的系统不支持GD库'); } } ? function __toString() { return ReSizeImage::ResizeImageInfo; } ? //设置目标图像的宽 public function setWidth($width) { if ($width <= 0) { throw new Exception('目标图像宽度不能小于0'); return ; } $this->width = $width; } ? //设置目标图像的高 public function setHeight($height) { if ($height <= 0) { throw new Exception('目标图像高度不能小于0'); return ; } $this->height = $height; } ? //设置源图像文件 public function setSourceFile($file) { if (!file_exists($file)) { throw new Exception('源图像文件不存在'); return ; } $this->sourceFile = $file; } ? //设置目标图像文件 public function setDstFile($file) { $this->dstFile = $file; } ? //设置是否生成新文件 public function saveFile($flag) { $this->saveFlag = (boolean)$flag; } ? //执行绘图操作,$quality参数表示生成图像的效果,数字越高,效果越好,不过仅用于jpeg类型的图像 public function draw($quality = 95) { $sourceImgInfo = @getimagesize($this->sourceFile); if (!is_array($sourceImgInfo)) { throw new Exception('源图像文件不存在'); return ; } switch($sourceImgInfo[2]){ case 1: $this->imgType="image/gif"; $this->sim = imagecreatefromgif($this->sourceFile); break; case 2: $this->imgType="image/jpeg"; $this->sim = imagecreatefromjpeg($this->sourceFile); break; case 3: $this->imgType="image/png"; $this->sim = imagecreatefrompng($this->sourceFile); break; case 15: $this->imgType="image/wbmp"; $this->sim = imagecreatefromwbmp($this->sourceFile); break; default: return '不支持的图像格式'; break; } ? //设置目标图像的实际宽和高 $dstWidth = $sourceWidth = $sourceImgInfo[0]; $dstHeight = $sourceHeight = $sourceImgInfo[1]; ? if ($sourceHeight > $this->height && $sourceWidth > $this->width) { if ($sourceHeight > $sourceWidth) { $zoom = $this->height / $sourceHeight; $dstHeight = $this->height; $dstWidth = $sourceWidth * $zoom; } else { $zoom = $this->width / $sourceWidth; $dstWidth = $this->width; $dstHeight = $sourceHeight * $zoom; } } ? //建立目标图像的句柄 $this->dim = @imagecreatetruecolor($dstWidth,$dstHeight) or imagecreate($dstWidth,$dstHeight); ? //将真彩色图像转换为调色板图像 imagetruecolortopalette($this->sim,false,256); ? //根据源图像颜色的总数并把它分配到目标图像上 $palsize = ImageColorsTotal($this->sim); for ($i = 0; $i<$palsize; $i++) { $colors = ImageColorsForIndex($this->sim,$i); ImageColorAllocate($this->dim,$colors['red'],$colors['green'],$colors['blue']); } ? //进行图像的缩放 imagecopyresampled($this->dim,$this->sim,$dstWidth,$dstHeight,$sourceWidth,$sourceHeight); ? //生成新的目标图像 if ($this->saveFlag) { $imgExt = substr($this->dstFile,strrpos($this->dstFile,'.') + 1); switch(strtolower($imgExt)){ case 'gif': if (!function_exists('imagegif')) { throw new Exception('你的GD库不支持gif图像的输出'); return ; } imagegif($this->dim,$this->dstFile); break; case 'jpeg': case 'jpg': imagejpeg($this->dim,$this->dstFile,$quality); break; case 'png': imagepng($this->dim,$this->dstFile); break; case 'wbmp': imagewbmp($this->dim,$this->dstFile); break; default: return '目标图像文件为空或者格式不对,无法进行保存'; break; } ? //直接输出目标图像至浏览器 } else { header ("Content-type: " . $this->imgType); switch($sourceImgInfo[2]){ case 1: imagegif($this->dim); break; case 2: imagejpeg($this->dim,'',$quality); break; case 3: imagepng($this->dim); break; case 15: imagewbmp($this->dim); break; default: return '不支持的图像格式'; break; } } return ; } ? function __destruct() { @ImageDestroy($this->sim); @ImageDestroy($this->dim); } } ?> 例子1:缩小图像后直接输出至浏览器 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |