欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【PHP实例:PHP上传自动生成缩略图及水印类】,下面是详细的分享!
PHP实例:PHP上传自动生成缩略图及水印类
思路很大一部分是原创的,但也有一些是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='http://www.chinaz.com/program/2008/1118/".newSmallImg."' border='0'><br><br>";
echo "<img src='http://www.chinaz.com/program/2008/1118/".newMark."' border='0'><br><br>";
echo "<a href='http://www.chinaz.com/program/2008/1118/./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上传自动生成缩略图及水印类,下面是编辑为你推荐的有价值的用户互动:
相关问题:php上传图片,如何自动生成对应的小图,保留原图。
答:$kf=$_FILES["pic"]['name']; $size=$_FILES['pic']['size']; $type=end(explode(".",$kf));//获取图片类型 $type_arr=array("gif","GIF","jpg","JPG","png","PNG","jpeg","GPEG"); if(!in_array($type,$type_arr)){ alert("很抱歉,目前只支持g... >>详细
相关问题:php上传图片生成三张缩略图,大中小。帮忙看一下
答:public function disposeImgAction($tmp_path, $dst_w, $file_path, $file_name) { $arr=getimagesize($tmp_path); $src_w=$arr[0]; $src_h=$arr[1]; $type=$arr[2]; switch($type){ case 1:$src_im=imagecreatefromgif($tmp_path);break; case ... >>详细
相关问题:谁能 给个PHP 生成缩略图打印水印 的 代码啊 ??
答:使用php的扩展,gd2.也就是图片处理函数库。主要是使用一些函数,imagecreatetruecolor(),imagecreatefromjpeg/gif/png()。创建两张图片资源,两张图片整合到一块的那个函数有些淡忘了,记得里面含有个copy。就是几个函数罢 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
