php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码


Posted in PHP onMay 15, 2010
<?php 
//上传文件类型列表 
$uptypes=array( 
'image/jpg', 
'image/jpeg', 
'image/png', 
'image/pjpeg', 
'image/gif', 
'image/bmp', 
'image/x-png' 
); 
$max_file_size = 200000; //上传文件大小限制, 单位BYTE 
$path_im = "prod_img/"; //生成大图保存文件夹路径 
$path_sim = "prod_simg/"; //缩略图保存文件夹路径 
$watermark = 1; //是否加水印(1为加水印,其他为不加水印); 
$watertype = 1; //水印类型(1为文字,2为图片) 
$waterstring = "[url=http://www.jy17.com/]http://www.jy17.com/[/url]"; //水印字符串 
$waterimg = "water.png"; //水印图片文件路径 
$waterclearly = 100; //水印透明度0-100,数字小透明高 
$imclearly = 100; //图片清晰度0-100,数字越大越清晰,文件尺寸越大 
$simclearly = 75; //缩略图清晰度0-100,数字越大越清晰,文件尺寸越大 
$smallmark = 1; //是否生成缩略图(1为加生成,其他为不); 
$dst_sw = 80; //定义缩略图宽度,高度我采用等比例缩放,所以只要比较宽度就可以了 
?> 
<form enctype="multipart/form-data" method="post" name="upform"> 
上传文件: 
<input name="upfile" type="file"> 
<input type="submit" value="上传"><br> 
允许上传的文件类型为:<?=implode(',',$uptypes)?> 
</form> 
<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
if (!is_uploaded_file($_FILES["upfile"][tmp_name])) 
//是否存在文件 
{ 
echo "图片不存在!"; 
exit; 
} 
$file = $_FILES["upfile"]; 
if($max_file_size < $file["size"]) 
//检查文件大小 
{ $max_file_size = $max_file_size/1000; 
echo "文件太大,超过 ".$max_file_size." KB!"; 
exit; 
} 
if(!in_array($file["type"],$uptypes)) 
//检查文件类型 
{ 
echo "文件类型不符!".$file["type"]; 
exit; 
} 
if(!file_exists($path_im)) 
//检查上传目录是否存在,不存在创建 
{ 
mkdir($path_im); 
} 
if(!file_exists($path_sim)) 
//检查缩略图目录是否存在,不存在创建 
{ 
mkdir($path_sim); 
} 
$filename = $file["tmp_name"]; 
$im_size = getimagesize($filename); 
$src_w = $im_size[0]; 
$src_h = $im_size[1]; 
$src_type = $im_size[2]; 
$pinfo = pathinfo($file["name"]); 
$filetype = $pinfo['extension']; 
$all_path = $path_im.time().".".$filetype; //路径+文件名,目前以上传时间命名 
if (file_exists($all_path)) 
{ 
echo "同名文件已经存在了"; 
exit; 
} 
if(!move_uploaded_file ($filename,$all_path)) 
{ 
echo "移动文件出错"; 
exit; 
} 
$pinfo = pathinfo($all_path); 
$fname = $pinfo[basename]; 
echo "<font color=red>已经成功上传</font><br>文件名: <font color=blue>".$all_path."</font><br>"; 
echo "宽度:".$src_w."px "; 
echo "长度:".$src_h."px "; 
echo "<br> 大小:".$file["size"]." bytes"; 
switch($src_type)//判断源图片文件类型 
{ 
case 1://gif 
$src_im = imagecreatefromgif($all_path);//从源图片文件取得图像 
break; 
case 2://jpg 
$src_im = imagecreatefromjpeg($all_path); 
break; 
case 3://png 
$src_im = imagecreatefrompng($all_path); 
break; 
//case 6: 
//$src_im=imagecreatefromwbmp($all_path); 
//break; 
default: 
die("不支持的文件类型"); 
exit; 
} 
if($watermark == 1) 
{ 
//$iinfo = getimagesize($all_path,$iinfo); 
$dst_im = imagecreatetruecolor($src_w,$src_h); 
//根据原图尺寸创建一个相同大小的真彩色位图 
$white = imagecolorallocate($dst_im,255,255,255);//白 
//给新图填充背景色 
$black = imagecolorallocate($dst_im,0,0,0);//黑 
$red = imagecolorallocate($dst_im,255,0,0);//红 
$orange = imagecolorallocate($dst_im,255,85,0);//橙 
imagefill($dst_im,0,0,$white); 
imagecopymerge($dst_im,$src_im,0,0,0,0,$src_w,$src_h,100);//原图图像写入新建真彩位图中 
//imagefilledrectangle($dst_im,1,$src_h-15,80,$src_h,$white); 
switch($watertype) 
{ 
case 1: //加水印字符串 
imagestring($dst_im,5,5,$src_h-20,$waterstring,$orange);//文字水印,字体5号颜色橙色,位于背景图左下角 
break; 
case 2: //加水印图片 
$lim_size = getimagesize($waterimg); //取得水印图像尺寸,信息 
switch($lim_size[2]) //判断水印图片文件类型 
{ 
case 1://gif 
$src_lim = imagecreatefromgif($waterimg); //取得水印图像 
break; 
case 2://jpg 
$src_lim = imagecreatefromjpeg($waterimg); 
break; 
case 3://png 
$src_lim = imagecreatefrompng($waterimg); 
break; 
//case 6: 
//$src_im=imagecreatefromwbmp($waterimg); 
//break; 
default: 
die("不支持的文件类型"); 
exit; 
} 
$src_lw = ($src_w-$lim_size[0])/2; //水印位于背景图正中央width定位 
$src_lh = ($src_h-$lim_size[1])/2; //height定位 
imagecopymerge($dst_im,$src_lim,$src_lw,$src_lh,0,0,$lim_size[0],$lim_size[1],$waterclearly);// 合并两个图像,设置水印透明度$waterclearly 
imagedestroy($src_lim); 
break; 
} 
switch($src_type) 
{ 
case 1: 
imagegif($dst_im,$all_path,$imclearly);//生成gif文件,图片清晰度0-100 
break; 
case 2: 
imagejpeg($dst_im,$all_path,$imclearly);//生成jpg文件,图片清晰度0-100 
break; 
case 3: 
imagepng($dst_im,$all_path,$imclearly);//生成png文件,图片清晰度0-100 
break; 
//case 6: 
//imagewbmp($dst_im,$all_path); 
break; 
} 
//释放缓存 
imagedestroy($dst_im); 
} 
if($smallmark == 1) 
{ 
$sall_path = $path_sim.time().".".$filetype; 
if (file_exists($sall_path)) 
{ 
echo "同名文件已经存在了"; 
exit; 
} 
if($src_w <= $dst_sw) // 原图尺寸 <= 缩略图尺寸 
{ 
$dst_sim = imagecreatetruecolor($src_w,$src_h); //新建缩略图真彩位图 
imagecopymerge($dst_sim,$src_im,0,0,0,0,$src_w,$src_h,100); //原图图像写入新建真彩位图中 
} 
if($src_w > $dst_sw) // 原图尺寸 > 缩略图尺寸 
{ 
$dst_sh = $dst_sw/$src_w*$src_h; 
$dst_sim = imagecreatetruecolor($dst_sw,$dst_sh); //新建缩略图真彩位图(等比例缩小原图尺寸) 
imagecopyresampled($dst_sim,$src_im,0,0,0,0,$dst_sw,$dst_sh,$src_w,$src_h); //原图图像写入新建真彩位图中 
} 
switch($src_type) 
{ 
case 1: 
imagegif($dst_sim,$sall_path,$simclearly);//生成gif文件,图片清晰度0-100 
break; 
case 2: 
imagejpeg($dst_sim,$sall_path,$simclearly);//生成jpg文件,图片清晰度0-100 
break; 
case 3: 
imagepng($dst_sim,$sall_path,$simclearly);//生成png文件,图片清晰度0-100 
break; 
//case 6: 
//imagewbmp($dst_sim,$sall_path); 
break; 
} 
//释放缓存 
imagedestroy($dst_sim); 
} 
//释放缓存 
imagedestroy($src_im); 
} 
?>

php等比例生成缩略图函数2
function reSizeImg($imgSrc, $resize_width, $resize_height, $isCut=false) { 
//图片的类型 
$type = substr ( strrchr ( $imgSrc, "." ), 1 ); 
//初始化图象 
if ($type == "jpg") { 
$im = imagecreatefromjpeg ( $imgSrc ); 
} 
if ($type == "gif") { 
$im = imagecreatefromgif ( $imgSrc ); 
} 
if ($type == "png") { 
$im = imagecreatefrompng ( $imgSrc ); 
} 
//目标图象地址 
$full_length = strlen ( $imgSrc ); 
$type_length = strlen ( $type ); 
$name_length = $full_length - $type_length; 
$name = substr ( $imgSrc, 0, $name_length - 1 ); 
$dstimg = $name . "_s." . $type; 
$width = imagesx ( $im ); 
$height = imagesy ( $im ); 
//生成图象 
//改变后的图象的比例 
$resize_ratio = ($resize_width) / ($resize_height); 
//实际图象的比例 
$ratio = ($width) / ($height); 
if (($isCut) == 1) //裁图 
{ 
if ($ratio >= $resize_ratio) //高度优先 
{ 
$newimg = imagecreatetruecolor ( $resize_width, $resize_height ); 
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, (($height) * $resize_ratio), $height ); 
ImageJpeg ( $newimg, $dstimg ); 
} 
if ($ratio < $resize_ratio) //宽度优先 
{ 
$newimg = imagecreatetruecolor ( $resize_width, $resize_height ); 
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, $width, (($width) / $resize_ratio) ); 
ImageJpeg ( $newimg, $dstimg ); 
} 
} else //不裁图 
{ 
if ($ratio >= $resize_ratio) { 
$newimg = imagecreatetruecolor ( $resize_width, ($resize_width) / $ratio ); 
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, ($resize_width) / $ratio, $width, $height ); 
ImageJpeg ( $newimg, $dstimg ); 
} 
if ($ratio < $resize_ratio) { 
$newimg = imagecreatetruecolor ( ($resize_height) * $ratio, $resize_height ); 
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, ($resize_height) * $ratio, $resize_height, $width, $height ); 
ImageJpeg ( $newimg, $dstimg ); 
} 
} 
ImageDestroy ( $im ); 
}
PHP 相关文章推荐
PHP 函数学习简单小结
Jul 08 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php class类的用法详细总结
Oct 17 PHP
PHP文件读取功能的应用实例
May 08 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 #PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 #PHP
PHP生成UTF8文件的方法
May 15 #PHP
PHP 魔术函数使用说明
May 14 #PHP
PHP 事务处理数据实现代码
May 13 #PHP
php 常用类汇总 推荐收藏
May 13 #PHP
php echo 输出字符串函数详解
May 13 #PHP
You might like
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python 产生token及token验证的方法
2018/12/26 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
大学生职业规划论文
2014/01/11 职场文书
家长对老师的感言
2014/03/11 职场文书
动员大会主持词
2014/03/20 职场文书
学校安全防火方案
2014/06/07 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
本溪水洞导游词
2015/02/11 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
一年级语文教学随笔
2015/08/14 职场文书
2016春节放假通知范文
2015/08/18 职场文书