|
|
图像缩小及格式转换 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
<?php /** * * 对图像进行缩小,也可对png, gif, jpeg, wbmp格式的图像进行转换 * 需要GD库的支持才可以,若要进行gif图像的输出需要GD2.0.28或更高版本才支持(或<gd1.6也支持) * gif的动画转了之后动画变成静画,不知为什么! * * @date 2004.08.16 * @author [email protected] * */ class ResizeImage { const ResizeImageInfo = "本类对图像进行缩小,也可对png, gif, jpeg, 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 ($width <= 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, 0, 0, 0, 0, $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); } } ?> <?php /* //例子1:缩小图像后直接输出至浏览器 $obj = new ReSizeImage(); $obj->setSourceFile('win.png'); $obj->saveFile(false); $obj->setWidth(250); $obj->setHeight(250); $obj->draw(); //例子2:缩小图像后保存新图像文件为“new.png” $obj = new ReSizeImage(); $obj->setSourceFile('win.png'); $obj->setDstFile('new.png'); $obj->setWidth(250); $obj->setHeight(250); $obj->draw(); //例子3:缩小图像后保存新图像文件为“new.jpg”,并设置其quality值为“100” $obj = new ReSizeImage(); $obj->setSourceFile('win.png'); $obj->setDstFile('new.jpg'); $obj->setWidth(250); $obj->setHeight(250); $obj->draw(100); //例子4:捕捉程序中的异常 try { $obj = new ReSizeImage(); $obj->setSourceFile('no.png'); $obj->saveFile(false); $obj->setWidth(250); $obj->setHeight(250); $obj->draw(); } catch (Exception $ex) { echo $ex; } */ ?> 
|
|
相关文章:相关软件: |
|