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 相关文章推荐
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
Apr 19 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
PHP培训要多少钱
Jun 06 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
PHP执行linux命令6个函数代码实例
Nov 24 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
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
python tqdm库的使用
2020/11/30 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
培训心得体会
2013/12/29 职场文书
敬老院活动总结
2014/04/28 职场文书
公司踏青活动方案
2014/08/16 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
世界文化遗产导游词
2015/02/13 职场文书
暑期工社会实践报告
2015/07/13 职场文书
大学校园招聘会感想
2015/08/10 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Python实现Hash算法
2022/03/18 Python