超级好用的一个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 相关文章推荐
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
PHP之uniqid()函数用法
Nov 03 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
php精度计算的问题解析
Jun 21 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学习之PHP运算符
2006/10/09 PHP
分享PHP header函数使用教程
2013/09/05 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JavaScript运算符小结
2015/06/03 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
JSON 数据格式详解
2017/09/13 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
用Python进行TCP网络编程的教程
2015/04/29 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
python实现网页录音效果
2020/10/26 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
春节请假条
2014/04/11 职场文书
工作分析计划书
2014/04/30 职场文书
合作意向书
2014/07/30 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
圣诞晚会主持词
2015/07/01 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
python 安全地删除列表元素的方法
2022/03/16 Python