PHP上传自动生成缩略图及水印类(含代码)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:PHP技术:txtSQL安装手册中文版
txtsql的最大优点之一是文档很详细,可惜,我在网上找了半天也找不到中文版的文档,所以只好自己动手,利人利已吧,不过自己的E文水平自己是很清楚的,希望大家看了不会笑掉大牙才好,还希望大家多多指教。 欢迎使用txtSQL 2.2快速安装手册。这页将指引你如何

思路很大一部分是原创的,但也有一些是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
}
?>

来源:网络

分享:初学PHP指导:php.ini 配置详细选项
php.ini 或 php3.ini 是 PHP 在启动时会读取的配置文件。该文件的存放路径为 /usr/local/lib/。在 PHP 3.x 版的配置文件为 php3.ini;而在 PHP 4.x 版改为 php.ini。若 PHP 安装成服务器的模块,则在 Web 服务器启动执行时会读取,之后就不再读取,因此改动

来源:模板无忧//所属分类:PHP教程/更新时间:2012-07-01
相关PHP教程