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程序61条面向对象分析设计的经验小结
Nov 12 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
php中rename函数用法分析
Nov 15 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
教你php如何实现验证码
Jan 20 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php中array_column函数简单实现方法
Jul 11 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
Javascript之文件操作
2007/03/07 Javascript
jQuery select控制插件
2009/08/17 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
10款最好的Python开发编辑器
2019/07/03 Python
对Python _取log的几种方式小结
2019/07/25 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
python 调整图片亮度的示例
2020/12/03 Python
Python项目打包成二进制的方法
2020/12/30 Python
python Scrapy框架原理解析
2021/01/04 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
茶叶店创业计划书范文
2014/01/19 职场文书
禁毒主题班会教案
2015/08/14 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python