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脚本的10个技巧(7)
Oct 09 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
php实现遍历多维数组的方法
Nov 25 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php中的时间处理
2006/10/09 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
python 正则式 概述及常用字符
2009/05/07 Python
python批量下载图片的三种方法
2013/04/22 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python+Django+apache的配置方法详解
2016/06/01 Python
python 重定向获取真实url的方法
2018/05/11 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
志愿者宣传口号
2014/06/17 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
作风大整顿心得体会
2014/09/10 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
Java实现简易的分词器功能
2021/06/15 Java/Android