当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP实例:PHP上传自动生成缩略图及水印类

PHP
PHP新手总结的PHP基础知识
php实现gb2312和unicode间编码转换
用php语言实现数据库连接详细代码介绍
详细解析 PHP 向 MySQL 发送数据过程
利用PHP V5开发多任务应用程序
详细讲解PHP中缓存技术的应用
php escapeshellcmd多字节编码漏洞
《PHP设计模式介绍》导言
《PHP设计模式介绍》第一章 编程惯用法
《PHP设计模式介绍》第二章 值对象模式
《PHP设计模式介绍》第三章 工厂模式
《PHP设计模式介绍》第四章 单件模式
《PHP设计模式介绍》第五章 注册模式
《PHP设计模式介绍》第六章 伪对象模式
《PHP设计模式介绍》第七章 策略模式
《PHP设计模式介绍》第八章 迭代器模式
《PHP设计模式介绍》第九章 观测模式
《PHP设计模式介绍》第十章 规范模式
《PHP设计模式介绍》第十一章 代理模式
《PHP设计模式介绍》第十二章 装饰器模式

PHP实例:PHP上传自动生成缩略图及水印类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 287 ::
收藏到网摘: n/a

思路很大一部分是原创的,但也有一些是COPY网络的,写得不够规范,还请各位大大不要见笑,同时给小弟些意见。

开始第一步:
创建文件夹,布局:
annex:附件(该目录下存放上传的原图片)
|— smallimg:存放缩略图片
|— mark:存放水印图片
include:存放类文件,字体(本程序代码使用的是:04B_08__.TTF)
|— upfile.php:集成简单上传,生成缩略图及水印的类文件信息
|— 04B_08__.TTF:字体文件
test.php:测试文件

进入第二步:
代码研究,希望各位能好好看看,小弟也是初学者,同时也希望各位能提出宝贵意见,小弟定会虚心领教的(写得不好不要拿鸡蛋砸偶噢)


以下为引用的内容:

-------------------------------------------------------------------------------
upfile.php

<?php
class UPImages {
var annexFolder = "annex";//附件存放点,默认为:annex
var smallFolder = "smallimg";//缩略图存放路径,注:必须是放在 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(error("没有上传图片信息,请确认"));
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;
}
}
?>

-------------------------------------------------------------------------

test.php
<?php
annexFolder = "annex";
smallFolder = "smallimg";
markFolder = "mark";
includeFolder = "include";

require("./".includeFolder."/upfile.php");
img = new UPImages(annexFolder,smallFolder,includeFolder);
text = array(www.dwww.cn,"all rights reserved");
if(@_GET["go"]) {
photo = img->upLoad("upfile");
img->maxWidth = img->maxHeight = 350;//设置生成水印图像值
img->toFile = true;
newSmallImg = img->smallImg(photo);
newMark = img->waterMark(photo,text);
echo "<img src='".newSmallImg."' border='0'><br><br>";
echo "<img src='".newMark."' border='0'><br><br>";
echo "<a href='./test.php'>继续上传</a>";
} else {
?>
<form method="post" action="./test.php?go=go" enctype="multipart/form-data">
<input type="file" name="upfile"><br><br>
<input type="submit" value="上传">
</form>
<?php
}
?>