超级好用的一个php上传图片类(随机名,缩略图,加水印)


Posted in PHP onJune 30, 2010

Upimages.class.php php上传类

<?php 
class UpImages { 
var $annexFolder = "upload";//附件存放点,默认为:annex 
var $smallFolder = "small";//缩略图存放路径,注:必须是放在 $annexFolder下的子目录,默认为:smallimg 
var $markFolder = "mark";//水印图片存放处 
var $upFileType = "jpg gif png";//上传的类型,默认为:jpg gif png rar zip 
var $upFileMax = 1024;//上传大小限制,单位是“KB”,默认为:1024KB 
var $fontType;//字体 
var $maxWidth = 500; //图片最大宽度 
var $maxHeight = 600; //图片最大高度 
function UpImages($annexFolder,$smallFolder,$includeFolder) { 
$this->annexFolder = $annexFolder; 
$this->smallFolder = $smallFolder; 
$this->fontType = $includeFolder."/04B_08__.TTF"; 
} 
function upLoad($inputName) { 
$imageName = time();//设定当前时间为图片名称 
if(@empty($_FILES[$inputName]["name"])) die("没有上传图片信息,请确认"); 
$name = explode(".",$_FILES[$inputName]["name"]);//将上传前的文件以“.”分开取得文件类型 
$imgCount = count($name);//获得截取的数量 
$imgType = $name[$imgCount-1];//取得文件的类型 
if(strpos($this->upFileType,$imgType) === false) die(error("上传文件类型仅支持 ".$this->upFileType." 不支持 ".$imgType)); 
$photo = $imageName.".".$imgType;//写入数据库的文件名 
$uploadFile = $this->annexFolder."/".$photo;//上传后的文件名称 
$upFileok = move_uploaded_file($_FILES[$inputName]["tmp_name"],$uploadFile); 
if($upFileok) { 
$imgSize = $_FILES[$inputName]["size"]; 
$kSize = round($imgSize/1024); 
if($kSize > ($this->upFileMax*1024)) { 
@unlink($uploadFile); 
die(error("上传文件超过 ".$this->upFileMax."KB")); 
} 
} else { 
die(error("上传图片失败,请确认你的上传文件不超过 $upFileMax KB 或上传时间超时")); 
} 
return $photo; 
} 
function getInfo($photo) { 
$photo = $this->annexFolder."/".$photo; 
$imageInfo = getimagesize($photo); 
$imgInfo["width"] = $imageInfo[0]; 
$imgInfo["height"] = $imageInfo[1]; 
$imgInfo["type"] = $imageInfo[2]; 
$imgInfo["name"] = basename($photo); 
return $imgInfo; 
} 
function smallImg($photo,$width=128,$height=128) { 
$imgInfo = $this->getInfo($photo); 
$photo = $this->annexFolder."/".$photo;//获得图片源 
$newName = substr($imgInfo["name"],0,strrpos($imgInfo["name"], "."))."_thumb.jpg";//新图片名称 
if($imgInfo["type"] == 1) { 
$img = imagecreatefromgif($photo); 
} elseif($imgInfo["type"] == 2) { 
$img = imagecreatefromjpeg($photo); 
} elseif($imgInfo["type"] == 3) { 
$img = imagecreatefrompng($photo); 
} else { 
$img = ""; 
} 
if(empty($img)) return False; 
$width = ($width > $imgInfo["width"]) ? $imgInfo["width"] : $width; 
$height = ($height > $imgInfo["height"]) ? $imgInfo["height"] : $height; 
$srcW = $imgInfo["width"]; 
$srcH = $imgInfo["height"]; 
if ($srcW * $width > $srcH * $height) { 
$height = round($srcH * $width / $srcW); 
} else { 
$width = round($srcW * $height / $srcH); 
} 
if (function_exists("imagecreatetruecolor")) { 
$newImg = imagecreatetruecolor($width, $height); 
ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); 
} else { 
$newImg = imagecreate($width, $height); 
ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); 
} 
if ($this->toFile) { 
if (file_exists($this->annexFolder."/".$this->smallFolder."/".$newName)) @unlink($this->annexFolder."/".$this->smallFolder."/".$newName); 
ImageJPEG($newImg,$this->annexFolder."/".$this->smallFolder."/".$newName); 
return $this->annexFolder."/".$this->smallFolder."/".$newName; 
} else { 
ImageJPEG($newImg); 
} 
ImageDestroy($newImg); 
ImageDestroy($img); 
return $newName; 
} 
function waterMark($photo,$text) { 
$imgInfo = $this->getInfo($photo); 
$photo = $this->annexFolder."/".$photo; 
$newName = substr($imgInfo["name"], 0, strrpos($imgInfo["name"], ".")) . "_mark.jpg"; 
switch ($imgInfo["type"]) { 
case 1: 
$img = imagecreatefromgif($photo); 
break; 
case 2: 
$img = imagecreatefromjpeg($photo); 
break; 
case 3: 
$img = imagecreatefrompng($photo); 
break; 
default: 
return False; 
} 
if (empty($img)) return False; 
$width = ($this->maxWidth > $imgInfo["width"]) ? $imgInfo["width"] : $this->maxWidth; 
$height = ($this->maxHeight > $imgInfo["height"]) ? $imgInfo["height"] : $this->maxHeight; 
$srcW = $imgInfo["width"]; 
$srcH = $imgInfo["height"]; 
if ($srcW * $width > $srcH * $height) { 
$height = round($srcH * $width / $srcW); 
} else { 
$width = round($srcW * $height / $srcH); 
} 
if (function_exists("imagecreatetruecolor")) { 
$newImg = imagecreatetruecolor($width, $height); 
ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); 
} else { 
$newImg = imagecreate($width, $height); 
ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]); 
} $white = imageColorAllocate($newImg, 255, 255, 255); 
$black = imageColorAllocate($newImg, 0, 0, 0); 
$alpha = imageColorAllocateAlpha($newImg, 230, 230, 230, 40); 
ImageFilledRectangle($newImg, 0, $height-26, $width, $height, $alpha); 
ImageFilledRectangle($newImg, 13, $height-20, 15, $height-7, $black); 
ImageTTFText($newImg, 4.9, 0, 20, $height-14, $black, $this->fontType, $text[0]); 
ImageTTFText($newImg, 4.9, 0, 20, $height-6, $black, $this->fontType, $text[1]); 
if($this->toFile) { 
if (file_exists($this->annexFolder."/".$this->markFolder."/".$newName)) @unlink($this->annexFolder."/".$this->markFolder."/".$newName); 
ImageJPEG($newImg,$this->annexFolder."/".$this->markFolder."/".$newName); 
return $this->annexFolder."/".$this->markFolder."/".$newName; 
} else { 
ImageJPEG($newImg); 
} 
ImageDestroy($newImg); 
ImageDestroy($img); 
return $newName; 
} 
} 
?>

使用方法
include 'Upimages.class.php'; 
$max="upload"; //文件上传路径 
$mix="small"; //缩略图路径(必须在upload下建立) 
$mark="mark"; //加水引的图片存放路径 
$text = array("oktang","2012"); //水印内容 
$img= new UpImages($max,$mix,$max); //实例化类文件 
$photo = $img->upLoad("file"); //上传的文件域 
$img->maxWidth = $img->maxHeight = 600; //设置高,和宽 
$img->toFile = true; 
$newSmallImg = $img->smallImg($photo); 
$newMark = $img->waterMark($photo,$text); 
echo $newSmallImg; 
echo $newMark; 
echo "<img src='".$newSmallImg."' border='0'><br><br>"; 
echo "<img src='".$newMark."' border='0'><br><br>";

注意里面有个字体文件,大家可以从网上下载。
PHP 相关文章推荐
[转帖]PHP世纪万年历
Dec 06 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
php查看当前Session的ID实例
Mar 16 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
PHP字符串处理的10个简单方法
Jun 30 #PHP
php flv视频时间获取函数
Jun 29 #PHP
PHP常用代码大全(新手入门必备)
Jun 29 #PHP
PHP print类函数使用总结
Jun 25 #PHP
php url地址栏传中文乱码解决方法集合
Jun 25 #PHP
PHP+ACCESS 文章管理程序代码
Jun 21 #PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 #PHP
You might like
第七节 类的静态成员 [7]
2006/10/09 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
python错误处理详解
2014/09/28 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python虚拟环境项目实例
2017/11/20 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python操作json的方法实例分析
2018/12/06 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
党校培训思想汇报
2014/01/03 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
2015大学生实训报告
2014/11/05 职场文书
实习单位指导教师评语
2014/12/30 职场文书
委托公证书样本
2015/01/23 职场文书
超强台风观后感
2015/06/09 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电