超级好用的一个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概述.
Oct 09 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
php实现事件监听与触发的方法
Nov 21 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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缓存类代码(附详细说明)
2011/06/09 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
php中JSON的使用与转换
2015/01/14 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
Python最长公共子串算法实例
2015/03/07 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Python 打印中文字符的三种方法
2018/08/14 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
饲料采购员岗位职责
2013/12/19 职场文书
土木工程专业推荐信
2014/02/19 职场文书
职业生涯规划书前言
2014/04/15 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫