php生成图片缩略图、水印的类
class UpFile {
public $FilePath = "UploadFile/"; //上传文件存放文件夹
public $FileSize = 1000000; //允许上传的大小
//如果要修改允许上传文件的类型 请搜索 【 switch ($UpFileType) { //文件类型 】
public $ReImageSize = array (
true, //是否生成缩略图
400, //缩略图宽
300,//缩略图高
"" //缩略图存放文件夹 如果为空和当前要生成缩略图的文件在同一目录 文件前缀R_
); //是否生成缩略图 array(生成或不生成,缩略图宽,缩略图高,存放文件夹); 注意:存放文件夹后跟 '/'
public $India = true; //是否打水印 true打 false不打
public $IndiaImage = ""; //水印图片地址为空则不打图片水印 如果有文字水印建议不要开启图片水印
public $IndiaImageX = 100; //图片距离图片左边距离
public $IndiaImageY = 10; //图片距离图片上面距离
public $IndiaText = "www.phplu.com"; //水印文字
public $FontSize = 6; //水印文字大小,1最小6最大
public $IndiaTextX = 10; //文字距离图片左边距离
public $IndiaTextY = 10; //文字距离图片上面距离
public $R = 250; //图片颜色三原色 $R红
public $G = 250; //$G绿
public $B = 250; //$B蓝
public $IndiaPath = ""; //加了水印的图片保存路径,如果为空就直接替代原来的图片
//开始上传处理
function UploadFile($UpFile) {
if ($UpFile == "") {
die("UploadFile:参数不足");
}
if (!file_exists($this->FilePath)) {
mkdir($this->FilePath);
}
$UpFileType = $UpFile['type'];
$UpFileSize = $UpFile['size'];
$UpFileTmpName = $UpFile['tmp_name'];
$UpFileName = $UpFile['name'];
$UpFileError = $UpFile['error'];
if ($UpFileSize > $this->FileSize) {
return false; //文件过大
}
switch ($UpFileType) { //文件类型
case 'image/jpeg' :
$Type = 'jpg';
break;
case 'image/pjpeg' :
$Type = 'jpg';
break;
case 'image/png' :
$Type = 'png';
break;
case 'image/gif' :
$Type = 'gif';
break;
}
if (!isset ($Type)) {
return false; //不支持此类型
}
if (!is_uploaded_file($UpFileTmpName) or !is_file($UpFileTmpName)) {
return false;
; //文件不是经过正规上传的;
}
if ($this->UpFileError != 0) {
return false; //其他错误
}
if ($this->UpFileError == 0) {
if (!file_exists($UpFileTmpName)) {
return false; //临时文件不存在
} else {
$FileName = date("YmdHis", time() + 3600 * 8); //图片以当前时间命名
$FileName = $this->FilePath . $FileName . "." . $Type;
if (!move_uploaded_file($UpFileTmpName, $FileName)) {
return false; //文件在移动中丢失
} else {
if ($this->India == true) {
$this->GoIndia($FileName, $Type,true);
} else {
if ($this->ReImageSize[0] == true) {
$this->GoReImageSize($FileName, $Type);
} else {
return true; //上传成功!
unlink($UpFileTmpName);
}
}
}
}
}
}
//添加水印处理
function GoIndia($FileName, $FileType,$ReImage=false) {
if (!file_exists($FileName)) {
$this->ReError(7); //要添加水印的文件不存在
} else {
if ($FileType == "jpg") {
$im = imagecreatefromjpeg($FileName);
} else
if ($FileType == "gif") {
$im = imagecreatefromgif($FileName);
} else
if ($FileType == "png") {
$im = imagecreatefrompng($FileName);
}
if ($this->IndiaText != "") { //如果水印文字不为空
$TextColor = imagecolorallocate($im, $this->R, $this->G, $this->B); //设置文字颜色
imagestring($im, $this->FontSize, $this->IndiaTextX, $this->IndiaTextY, $this->IndiaText, $TextColor); //将文字写入图片
}
if ($this->IndiaImage != "") {//如果水印图片不为空
$IndiaImageType = GetImageSize($this->IndiaImage);
$LogoW = $IndiaImageType[0]; //得到水印图片的宽
$LogoH = $IndiaImageType[1]; //得到水印图片的高
switch ($IndiaImageType[2]) { //判断水印图片的格式
case 1 :
$IndiaImageType = "gif";
$Logo = imagecreatefromgif($this->IndiaImage);
break;
case 2 :
$IndiaImageType = "jpg";
$Logo = imagecreatefromjpeg($this->IndiaImage);
break;
case 3 :
$IndiaImageType = "png";
$Logo = imagecreatefrompng($this->IndiaImage);
break;
}
imagealphablending($im, true); //打开混色模式
imagecopy($im, $Logo, $this->IndiaImageX, $this->IndiaImageY, 0, 0, $LogoW, $LogoH);
imagedestroy($im);
imagedestroy($Logo);
}
}
if ($this->IndiaPath == "") { //如果水印存放地址不为空
if ($FileType == "jpg") {
imagejpeg($im, $FileName);
} else
if ($FileType == "gif") {
imagegif($im, $FileName);
} else
if ($FileType == "png") {
imagepng($im, $FileName);
}
if($ReImage == true){
$this->GoReImageSize($FileName,$FileType);
}else{
return true; //添加水印成功
}
} else {
if (!file_exists($this->IndiaPath)) {
mkdir($this->IndiaPath);
return false; //请重新上传
} else {
$IndiaName = basename($FileName);
$IndiaName = $this->IndiaPath . $IndiaName;
if ($FileType == "jpg") {
imagejpeg($im, $IndiaName);
} else
if ($FileType == "gif") {
imagegif($im, $IndiaName);
} else
if ($FileType == "png") {
imagepng($im, $IndiaName);
}
if($ReImage == true){
$this->GoReImageSize($IndiaName,$FileType);
echo $IndiaName;
}else{
return true; //添加水印成功
}
}
}
}
function GoReImageSize($FileName, $FileType) {
if (!file_exists($FileName)) {
return false; //要生成缩略图的图片不存在
} else {
if ($FileType == 'jpg') {
$ReImage = imagecreatefromjpeg($FileName);
}
elseif ($FileType == 'png') {
$ReImage = imagecreatefrompng($FileName);
} else
if ($FileType == 'gif') {
$ReImage = imagecreatefromgif($FileName);
}
if (isset ($ReImage)) {
$SrcImageType = getimagesize($FileName);
$SrcImageTypeW = $SrcImageType[0]; //得到原始图片宽度
$SrcImageTypeH = $SrcImageType[1]; //得到原始图片高度
$ReIm = imagecreatetruecolor($this->ReImageSize[1], $this->ReImageSize[2]);
imagecopyresized($ReIm, $ReImage, 0, 0, 0, 0, $this->ReImageSize[1], $this->ReImageSize[2], $SrcImageTypeW, $SrcImageTypeH);
$ReImagePath = $this->ReImageSize[3];
if ($ReImagePath != "") { //如果存放水印地址不为空
if (!file_exists($ReImagePath)) {
mkdir($ReImagePath);
} else {
$ReImageName = basename($FileName);
$ReImageName = $ReImagePath . "R_" . $ReImageName;
if ($FileType == "gif")
imagegif($ReIm, $ReImageName);
else
if ($FileType == "jpg")
imagejpeg($ReIm, $ReImageName);
else
if ($FileType == "png")
imagepng($ReIm, $ReImageName);
return true;
}
} else {
$FileName = basename($FileName);
if($this->IndiaPath == ""){
$FileName = $this->FilePath."R_" . $FileName;
}else{
$FileName = $this->IndiaPath."R_" . $FileName;
}
if ($FileType == "gif")
imagegif($ReIm, $FileName);
else
if ($FileType == "jpg")
imagejpeg($ReIm, $FileName);
else
if ($FileType == "png")
imagepng($ReIm, $FileName);
return true;
}
}
}
}
}
if ($_POST["submit"]) {
$File = $_FILES['UploadFile'];
$UpFile = new UpFile();
echo $UpFile->UploadFile($File);
}
» 本文来自:程程 | 一个敲代码的人 » 《php生成图片缩略图、水印的类》
» 本文链接地址:http://www.phplu.com/?p=640 » 英雄不问来路,转载请注明出处,谢谢。
posted on 2012-02-01 11:44 kudosharry 阅读(226) 评论(0) 编辑 收藏 举报