超级好用的一个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 相关文章推荐
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php利用事务处理转账问题
Apr 22 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
php高清晰度无损图片压缩功能的实现代码
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
PHP 手机归属地查询 api
2010/02/08 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
cookie的secure属性详解
2015/04/08 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python使用mysql的两种使用方式
2018/03/07 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
介绍Java的内部类
2012/10/27 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
护理专业学生的求职信范文
2013/12/11 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
工作睡觉检讨书
2014/02/25 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python