php生成缩微图类

来源:互联网 发布:带-域名 编辑:程序博客网 时间:2024/05/17 17:57
<?php /* * 图片微缩类 * author chendan 2011.09.01. */class Thumbnail {protected $_original;//原始宽度protected $_originalwidth;//原始高度protected $_originalheight;//缩微宽度protected $_thumbwidth;//缩微高度protected $_thumbheight;protected $_maxsize = 120;protected $_canprocess = false;protected $_imagetype;protected $_destination;protected $_name;protected $_suffix = "_thb";protected $_messages = array();protected $_filename;public function __construct($image) {if(is_file($image) && is_readable($image)){$details = getimagesize($image);}else{$details = null;$this->_messages[] = "Can not open $image";}if(is_array($details)){$this->_original = $image;$this->_originalwidth = $details[0];$this->_originalheight = $details[1];$this->checkType($details['mime']);}else{$this->_messages[] = "$image does not appear to be an image"; }}protected function checkType($mime) {$mimetypes = array('image/jpeg','image/jpg','image/png','image/gif');if(in_array($mime,$mimetypes)){$this->_canprocess = true;$this->_imagetype = substr($mime,6);}}public function setDestination($destination) {if(is_dir($destination) && is_writable($destination)){$last = substr($destination,-1);if($last == '/' || $last =="\\"){$this->_destination = $destination;}else{$this->_destination = $destination.DIRECTORY_SEPARATOR;}}else{$this->_messages[] = "Cannot write to $destination";}}public function setMaxSize($size) {if(is_numeric($size) && $size > 0){$this->_maxsize = $size;}else{$this->_canprocess = false;$this->_messages[] = "The value for setMaxSize() must be a positive number";}}public function setSuffix($suffix) {if(preg_match('/^\w+$/',$suffix)){if(strpos($suffix,'_')!==0){$this->_suffix = '_'.$suffix;}else{$this->_suffix = $suffix;}}else{$this->_suffix = '';}}protected function calculateSize($width,$height) {if($width<$this->_maxsize && $height < $this->_maxsize){$ratio = 1;}elseif($width>$height){$ratio = $this->_maxsize / $width;}else{$ratio = $this->_maxsize / $height;}$this->_thumbwidth = round($width * $ratio);$this->_thumbheight = round($height * $ratio);}protected function getName() {$extensions = array('/\.jpeg$/i','/\.jpg$/i','/\.png$/i','/\.gif$/i');$this->_name = preg_replace($extensions,'',basename($this->_original));}public function create() {if($this->_canprocess && $this->_originalwidth != 0){$this->calculateSize($this->_originalwidth,$this->_originalheight);$this->getName();$this->createThumbnail();}elseif($this->_originalwidth == 0){$this->_messages[] = "Can not determine size of ".$this->_original;}}protected function createImageResource() {if($this->_imagetype == 'jpeg'){return imagecreatefromjpeg($this->_original);}elseif($this->_imagetype == 'png'){return imagecreatefrompng($this->_original);}elseif($this->_imagetype == 'gif'){return imagecreatefromgif($this->_original);}}protected function createThumbnail() {$resource = $this->createImageResource();$thumb = imagecreatetruecolor($this->_thumbwidth,$this->_thumbheight);imagecopyresampled($thumb,$resource,0,0,0,0,$this->_thumbwidth,$this->_thumbheight,$this->_originalwidth,$this->_originalheight);$newname = $this->_name.$this->_suffix;if($this->_imagetype == 'jpeg'){$newname .= '.jpg';$success = imagejpeg($thumb,$this->_destination.$newname,100);}elseif($this->_imagetype == 'png'){$newname .= '.png';$success = imagepng($thumb,$this->_destination.$newname,0);}elseif($this->_imagetype == 'gif'){$newname .= '.gif';$success = imagegif($thumb,$this->_destination.$newname);}if($success){$this->_filename = $newname;$this->_messages[] = "$newname 创建成功.";}else{$this->_messages[] = basename($this->_original)."不能创建缩微图";}imagedestroy($resource);imagedestroy($thumb);}public function getMessages() {return $this->_messages;}public function getFilename() {return $this->_filename;}}?>

原创粉丝点击