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连接SQLServer2005 的问题解决方法
Jul 19 PHP
php开发环境配置记录
Jan 14 PHP
PHP输入流php://input介绍
Sep 18 PHP
php定界符
Jun 19 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
Laravel框架下的Contracts契约详解
Mar 17 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
php 什么是PEAR?
2009/03/19 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
javascript String 对象
2008/04/25 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python psutil模块简单使用实例
2015/04/28 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python重新加载模块的实现方法
2018/10/16 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python GUI编程完整示例
2019/04/04 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
中专毕业生自荐信
2013/11/16 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL