* @version $Id$ +------------------------------------------------------------------------------ */ class Image extends Think {//类定义开始 /** +---------------------------------------------------------- * 取得图像信息 * +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 图像文件名 +---------------------------------------------------------- * @return mixed +---------------------------------------------------------- */ static function getImageInfo($img) { $imageInfo = getimagesize($img); if( $imageInfo!== false) { $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]),1)); $imageSize = filesize($img); $info = array( "width"=>$imageInfo[0], "height"=>$imageInfo[1], "type"=>$imageType, "size"=>$imageSize, "mime"=>$imageInfo['mime'] ); return $info; }else { return false; } } /** +---------------------------------------------------------- * 为图片添加水印 +---------------------------------------------------------- * @static public +---------------------------------------------------------- * @param string $source 原文件名 * @param string $water 水印图片 * @param string $$savename 添加水印后的图片名 * @param string $alpha 水印的透明度 +---------------------------------------------------------- * @return string +---------------------------------------------------------- * @throws ThinkExecption +---------------------------------------------------------- */ static public function water($source, $water, $savename=null, $alpha=80) { //检查文件是否存在 if (!file_exists($source) || !file_exists($water)) return false; //图片信息 $sInfo = self::getImageInfo($source); $wInfo = self::getImageInfo($water); //如果图片小于水印图片,不生成图片 if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height']) return false; //建立图像 $sCreateFun = "imagecreatefrom" . $sInfo['type']; $sImage = $sCreateFun($source); $wCreateFun = "imagecreatefrom" . $wInfo['type']; $wImage = $wCreateFun($water); //设定图像的混色模式 imagealphablending($wImage, true); //图像位置,默认为右下角右对齐 $posY = $sInfo["height"] - $wInfo["height"]; $posX = $sInfo["width"] - $wInfo["width"]; //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha); //输出图像 $ImageFun = 'Image' . $sInfo['type']; //如果没有给出保存文件名,默认为原图像名 if (!$savename) { $savename = $source; @unlink($source); } //保存图像 $ImageFun($sImage, $savename); imagedestroy($sImage); } static public function watermark($source,$target = '',$config ) { $watermarkPadding = $config['watermark_pospadding']; $w_pos = $config['watermark_pos']; if($config['watermark_img'])$w_img = './Public/Images/'.$config['watermark_img']; $w_text = $config['watemard_text']; $w_font = $config['watemard_text_size']; $w_color = $config['watemard_text_color']; $fontface = './Public/Images/font/'.$config['watemard_text_face']; $w_pct = $config['watermark_pct']; $w_quality = $config['watermark_quality']; $w_minheight = $config['watemard_text']; $w_minwidth = $config['watemard_text']; $watermarkPadding = $config['watermark_pospadding']; $w_pos = $config['watermark_pos']; $positionPadding = ($watermarkPadding && $watermarkPadding > 0) ? $watermarkPadding : 5; // 边距 $w_pos = $w_pos ? $w_pos : 9; $w_img = $w_img ? $w_img : $w_img; if(!$target) $target = $source; $source_info = getimagesize($source); $source_w = $source_info[0]; $source_h = $source_info[1]; if($source_w < $w_minwidth || $source_h < $w_minheight) return false; switch($source_info[2]) { case 1 : $source_img = imagecreatefromgif($source); break; case 2 : $source_img = imagecreatefromjpeg($source); break; case 3 : $source_img = imagecreatefrompng($source); break; default : return false; } if(!empty($w_img) && file_exists($w_img)) { $ifwaterimage = 1; $water_info = getimagesize($w_img); $width = $water_info[0]; $height = $water_info[1]; switch($water_info[2]) { case 1 : $water_img = imagecreatefromgif($w_img); break; case 2 : $water_img = imagecreatefromjpeg($w_img); break; case 3 : $water_img = imagecreatefrompng($w_img); break; default : return; } } else { $ifwaterimage = 0; $temp = imagettfbbox(ceil($w_font*2.5), 0, $fontface, $w_text); $width = $temp[2] - $temp[6]; $height = $temp[3] - $temp[7]; unset($temp); } switch($w_pos) { case 1: $wx = $positionPadding; $wy = $positionPadding; break; case 2: $wx = ($source_w - $width) / 2; $wy = $positionPadding; break; case 3: $wx = $source_w - $width; $wy = $positionPadding; break; case 4: $wx = $positionPadding; $wy = ($source_h - $height) / 2; break; case 5: $wx = ($source_w - $width) / 2; $wy = ($source_h - $height) / 2; break; case 6: $wx = $source_w - $width - $positionPadding; $wy = ($source_h - $height) / 2; break; case 7: $wx = $positionPadding; $wy = $source_h - $height; break; case 8: $wx = ($source_w - $width) / 2; $wy = $source_h - $height - $positionPadding; break; case 9: $wx = $source_w - $width - $positionPadding; $wy = $source_h - $height - $positionPadding ; break; case 10: $wx = rand(0,($source_w - $width)); $wy = rand(0,($source_h - $height)); break; default: $wx = rand(0,($source_w - $width)); $wy = rand(0,($source_h - $height)); break; } if($ifwaterimage) { if($water_info[2] == 3) { imagecopy($source_img, $water_img, $wx, $wy, 0, 0, $width, $height); } else { imagecopymerge($source_img, $water_img, $wx, $wy, 0, 0, $width, $height, $w_pct); } } else { if(!empty($w_color) && (strlen($w_color)==7)) { $r = hexdec(substr($w_color,1,2)); $g = hexdec(substr($w_color,3,2)); $b = hexdec(substr($w_color,5)); } else { return; } $black = imagecolorallocate($source_img, $r,$g, $b);//设置颜色 imagettftext($source_img, $w_font, 0, $wx, $wy, $black, $fontface, $w_text);//打印水印 } switch($source_info[2]) { case 1 : imagegif($source_img, $target); break; case 2 : imagejpeg($source_img, $target, $w_quality); break; case 3 : imagepng($source_img, $target); break; default : return; } if(isset($water_info)) { unset($water_info); } if(isset($water_img)) { imagedestroy($water_img); } unset($source_info); imagedestroy($source_img); return true; } /** +---------------------------------------------------------- * 显示服务器图像文件 * 支持URL方式 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $imgFile 图像文件名 * @param string $text 文字字符串 * @param string $width 图像宽度 * @param string $height 图像高度 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ static function showImg($imgFile,$text='',$width=80,$height=30) { //获取图像文件信息 $info = Image::getImageInfo($imgFile); if($info !== false) { $createFun = str_replace('/','createfrom',$info['mime']); $im = $createFun($imgFile); if($im) { $ImageFun= str_replace('/','',$info['mime']); if(!empty($text)) { $tc = imagecolorallocate($im, 0, 0, 0); imagestring($im, 3, 5, 5, $text, $tc); } if($info['type']=='png' || $info['type']=='gif') { imagealphablending($im, false);//取消默认的混色模式 imagesavealpha($im,true);//设定保存完整的 alpha 通道信息 } header("Content-type: ".$info['mime']); $ImageFun($im); imagedestroy($im); return ; } } //获取或者创建图像文件失败则生成空白PNG图片 $im = imagecreatetruecolor($width, $height); $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); imagestring($im, 4, 5, 5, "NO PIC", $tc); Image::output($im); return ; } /** +---------------------------------------------------------- * 生成缩略图 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 原图 * @param string $type 图像格式 * @param string $thumbname 缩略图文件名 * @param string $maxWidth 宽度 * @param string $maxHeight 高度 * @param string $position 缩略图保存目录 * @param boolean $interlace 启用隔行扫描 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ static function thumb($image,$thumbname,$type='',$maxWidth=200,$maxHeight=50,$interlace=true) { // 获取原图信息 $info = Image::getImageInfo($image); if($info !== false) { $srcWidth = $info['width']; $srcHeight = $info['height']; $type = empty($type)?$info['type']:$type; $type = strtolower($type); $interlace = $interlace? 1:0; unset($info); $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例 if($scale>=1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; }else{ // 缩略图尺寸 $width = (int)($srcWidth*$scale); $height = (int)($srcHeight*$scale); } // 载入原图 $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type); $srcImg = $createFun($image); //创建缩略图 if($type!='gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width, $height); else $thumbImg = imagecreate($width, $height); // 复制图片 if(function_exists("ImageCopyResampled")) imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight); else imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight); if('gif'==$type || 'png'==$type) { //imagealphablending($thumbImg, false);//取消默认的混色模式 //imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息 $background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿色 imagecolortransparent($thumbImg,$background_color); // 设置为透明色,若注释掉该行则输出绿色的图 } // 对jpeg图形设置隔行扫描 if('jpg'==$type || 'jpeg'==$type) imageinterlace($thumbImg,$interlace); //$gray=ImageColorAllocate($thumbImg,255,0,0); //ImageString($thumbImg,2,5,5,"ThinkPHP",$gray); // 生成图片 // $imageFun = 'image'.($type=='jpg'?'jpeg':$type); //$imageFun($thumbImg,$thumbname); if($type=='jpg' || $type=='jpeg') { imagejpeg($thumbImg,$thumbname, 100); } else { $imageFun = 'image'.$type; $imageFun($thumbImg,$thumbname); } imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false; } /** +---------------------------------------------------------- * 根据给定的字符串生成图像 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $string 字符串 * @param string $size 图像大小 width,height 或者 array(width,height) * @param string $font 字体信息 fontface,fontsize 或者 array(fontface,fontsize) * @param string $type 图像格式 默认PNG * @param integer $disturb 是否干扰 1 点干扰 2 线干扰 3 复合干扰 0 无干扰 * @param bool $border 是否加边框 array(color) +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static function buildString($string,$rgb=array(),$filename='',$type='png',$disturb=1,$border=true) { if(is_string($size)) $size = explode(',',$size); $width = $size[0]; $height = $size[1]; if(is_string($font)) $font = explode(',',$font); $fontface = $font[0]; $fontsize = $font[1]; $length = strlen($string); $width = ($length*9+10)>$width?$length*9+10:$width; $height = 22; if ( $type!='gif' && function_exists('imagecreatetruecolor')) { $im = @imagecreatetruecolor($width,$height); }else { $im = @imagecreate($width,$height); } if(empty($rgb)) { $color = imagecolorallocate($im, 102, 104, 104); }else{ $color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]); } $backColor = imagecolorallocate($im, 255,255,255); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); @imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); @imagestring($im, 5, 5, 3, $string, $color); if(!empty($disturb)) { // 添加干扰 if($disturb=1 || $disturb=3) { for($i=0;$i<25;$i++){ imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor); } }elseif($disturb=2 || $disturb=3){ for($i=0;$i<10;$i++){ imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$pointColor); } } } Image::output($im,$type,$filename); } /** +---------------------------------------------------------- * 生成图像验证码 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $length 位数 * @param string $mode 类型 * @param string $type 图像格式 * @param string $width 宽度 * @param string $height 高度 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static function buildImageVerify($length=4,$mode=1,$type='png',$width=48,$height=22,$verifyName='verify') { import('@.ORG.String'); $randval = String::rand_string($length,$mode); $_SESSION[$verifyName]= md5($randval); $width = ($length*10+10)>$width?$length*10+10:$width; if ( $type!='gif' && function_exists('imagecreatetruecolor')) { $im = @imagecreatetruecolor($width,$height); }else { $im = @imagecreate($width,$height); } $r = Array(225,255,255,223); $g = Array(225,236,237,255); $b = Array(225,236,166,125); $key = mt_rand(0,3); $backColor = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); @imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); $stringColor = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120)); // 干扰 for($i=0;$i<10;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor); } for($i=0;$i<25;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor); } for($i=0;$i<$length;$i++) { imagestring($im,5,$i*10+5,mt_rand(1,8),$randval{$i}, $stringColor); } // @imagestring($im, 5, 5, 3, $randval, $stringColor); Image::output($im,$type); } // 中文验证码 static function GBVerify($length=4,$type='png',$width=180,$height=50,$fontface='simhei.ttf',$verifyName='verify') { $code = rand_string($length,4); $width = ($length*45)>$width?$length*45:$width; $_SESSION[$verifyName]= md5($code); $im=imagecreatetruecolor($width,$height); $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $bkcolor=imagecolorallocate($im,250,250,250); imagefill($im,0,0,$bkcolor); @imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); // 干扰 for($i=0;$i<15;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor); } for($i=0;$i<255;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor); } if(!is_file($fontface)) { $fontface = dirname(__FILE__)."/".$fontface; } for($i=0;$i<$length;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); //这样保证随机出来的颜色较深。 $codex= msubstr($code,$i,1); imagettftext($im,mt_rand(16,20),mt_rand(-60,60),40*$i+20,mt_rand(30,35),$fontcolor,$fontface,$codex); } Image::output($im,$type); } /** +---------------------------------------------------------- * 把图像转换成字符显示 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 要显示的图像 * @param string $type 图像类型,默认自动获取 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static function showASCIIImg($image,$string='',$type='') { $info = Image::getImageInfo($image); if($info !== false) { $type = empty($type)?$info['type']:$type; unset($info); // 载入原图 $createFun = 'ImageCreateFrom'.($type=='jpg'?'jpeg':$type); $im = $createFun($image); $dx = imagesx($im); $dy = imagesy($im); $i = 0; $out = ''; set_time_limit(0); for($y = 0; $y < $dy; $y++) { for($x=0; $x < $dx; $x++) { $col = imagecolorat($im, $x, $y); $rgb = imagecolorsforindex($im,$col); $str = empty($string)?'*':$string[$i++]; $out .= sprintf(''.$str.'',$rgb['red'],$rgb['green'],$rgb['blue']); } $out .= "
\n"; } $out .= '
'; imagedestroy($im); return $out; } return false; } /** +---------------------------------------------------------- * 生成高级图像验证码 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $type 图像格式 * @param string $width 宽度 * @param string $height 高度 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static function showAdvVerify($type='png',$width=180,$height=40) { $rand = range('a','z'); shuffle($rand); $verifyCode = array_slice($rand,0,10); $letter = implode(" ",$verifyCode); $_SESSION['verifyCode'] = $verifyCode; $im = imagecreate($width,$height); $r = array(225,255,255,223); $g = array(225,236,237,255); $b = array(225,236,166,125); $key = mt_rand(0,3); $backColor = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]); $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); $numberColor = imagecolorallocate($im, 255,rand(0,100), rand(0,100)); $stringColor = imagecolorallocate($im, rand(0,100), rand(0,100), 255); // 添加干扰 /* for($i=0;$i<10;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor); } for($i=0;$i<255;$i++){ $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor); }*/ imagestring($im, 5, 5, 1, "0 1 2 3 4 5 6 7 8 9", $numberColor); imagestring($im, 5, 5, 20, $letter, $stringColor); Image::output($im,$type); } /** +---------------------------------------------------------- * 生成UPC-A条形码 +---------------------------------------------------------- * @static +---------------------------------------------------------- * @param string $type 图像格式 * @param string $type 图像格式 * @param string $lw 单元宽度 * @param string $hi 条码高度 +---------------------------------------------------------- * @return string +---------------------------------------------------------- */ static function UPCA($code,$type='png',$lw=2,$hi=100) { static $Lencode = array('0001101','0011001','0010011','0111101','0100011', '0110001','0101111','0111011','0110111','0001011'); static $Rencode = array('1110010','1100110','1101100','1000010','1011100', '1001110','1010000','1000100','1001000','1110100'); $ends = '101'; $center = '01010'; /* UPC-A Must be 11 digits, we compute the checksum. */ if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); } /* Compute the EAN-13 Checksum digit */ $ncode = '0'.$code; $even = 0; $odd = 0; for ($x=0;$x<12;$x++) { if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; } } $code.=(10 - (($odd * 3 + $even) % 10)) % 10; /* Create the bar encoding using a binary string */ $bars=$ends; $bars.=$Lencode[$code[0]]; for($x=1;$x<6;$x++) { $bars.=$Lencode[$code[$x]]; } $bars.=$center; for($x=6;$x<12;$x++) { $bars.=$Rencode[$code[$x]]; } $bars.=$ends; /* Generate the Barcode Image */ if ( $type!='gif' && function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor($lw*95+30,$hi+30); }else { $im = imagecreate($lw*95+30,$hi+30); } $fg = ImageColorAllocate($im, 0, 0, 0); $bg = ImageColorAllocate($im, 255, 255, 255); ImageFilledRectangle($im, 0, 0, $lw*95+30, $hi+30, $bg); $shift=10; for ($x=0;$x=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; } if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; } ImageFilledRectangle($im, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color); } /* Add the Human Readable Label */ ImageString($im,4,5,$hi-5,$code[0],$fg); for ($x=0;$x<5;$x++) { ImageString($im,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg); ImageString($im,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg); } ImageString($im,4,$lw*95+17,$hi-5,$code[11],$fg); /* Output the Header and Content. */ Image::output($im,$type); } // 生成手机号码 static public function buildPhone() { } // 生成邮箱图片 static public function buildEmail($email,$rgb=array(),$filename='',$type='png') { $mail = explode('@',$email); $user = trim($mail[0]); $mail = strtolower(trim($mail[1])); $path = dirname(__FILE__).'/Mail/'; if(is_file($path.$mail.'.png')) { $im = imagecreatefrompng($path.$mail.'.png'); $user_width = imagettfbbox(9, 0, dirname(__FILE__)."/Mail/tahoma.ttf", $user); $x_value = (200 - ($user_width[2] + 113)); if(empty($rgb)) { $color = imagecolorallocate($im, 102, 104, 104); }else{ $color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]); } imagettftext($im, 9, 0, $x_value, 16, $color, dirname(__FILE__)."/Mail/tahoma.ttf", $user); }else{ $user_width = imagettfbbox(9, 0, dirname(__FILE__)."/Mail/tahoma.ttf", $email); $width = $user_width[2]+15; $height = 20; $im = imagecreate($width,20); $backColor = imagecolorallocate($im, 255,255,255); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //点颜色 imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); if(empty($rgb)) { $color = imagecolorallocate($im, 102, 104, 104); }else{ $color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]); } imagettftext($im, 9, 0, 5, 16, $color, dirname(__FILE__)."/Mail/tahoma.ttf", $email); for($i=0;$i<25;$i++){ imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor); } } Image::output($im,$type,$filename); } static function output($im,$type='png',$filename='') { header("Content-type: image/".$type); $ImageFun='image'.$type; if(empty($filename)) { $ImageFun($im); }else{ $ImageFun($im,$filename); } imagedestroy($im); } }//类定义结束 ?>