PHP经典的给图片加水印程序


Posted in PHP onDecember 06, 2006

<?php  
/************************************************************** 

参数说明:  
$max_file_size  : 上传文件大小限制, 单位BYTE  
$destination_folder : 上传文件路径  
$watermark   : 是否附加水印(1为加水印,其他为不加水印);  

使用说明:  
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;  
2. 将extension_dir =改为你的php_gd2.dll所在目录;  
**************************************************************/  

//上传文件类型列表  
$uptypes=array(  
   'image/jpg',  
   'image/jpeg',  
   'image/png',  
   'image/pjpeg',  
   'image/gif',  
   'image/bmp',  
   'image/x-png'  
);  

$max_file_size=2000000;     //上传文件大小限制, 单位BYTE  
$destination_folder="uploadimg/"; //上传文件路径  
$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);  
$watertype=1;      //水印类型(1为文字,2为图片)  
$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);  
$waterstring="http://www.mop8.com/";  //水印字符串  
$waterimg="xplore.gif";    //水印图片  
$imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);  
$imgpreviewsize=1/1;    //缩略图比例  
?>  
<html>  
<head>  
<title>图片打水印程序演示!WWW.MOP8.COM</title>  
<style type="text/css">  
<!--  
body  
{  
    font-size: 9pt;  
}  
input  
{  
    background-color: #66CCFF;  
    border: 1px inset #CCCCCC;  
}  
-->  
</style>  
</head>  

<body>  
<center> 
<form enctype="multipart/form-data" method="post" name="upform">  
 上传文件:  
 <input name="upfile" type="file">  
 <input type="submit" value="上传"><P>  
 允许上传的文件类型为:<?=implode(', ',$uptypes)?>  
</form>  
<FONT COLOR="#FF0000">本演示空间由TuWoo提供,本程序采用文字水印的方式.</FONT></CENTER> 
<?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"])  
   //检查文件大小  
   {  
       echo "文件太大!";  
       exit;  
   }  

   if(!in_array($file["type"], $uptypes))  
   //检查文件类型  
   {  
       echo "文件类型不符!".$file["type"];  
       exit;  
   }  

   if(!file_exists($destination_folder))  
   {  
       mkdir($destination_folder);  
   }  

   $filename=$file["tmp_name"];  
   $image_size = getimagesize($filename);  
   $pinfo=pathinfo($file["name"]);  
   $ftype=$pinfo['extension'];  
   $destination = $destination_folder.time().".".$ftype;  
   if (file_exists($destination) && $overwrite != true)  
   {  
       echo "同名文件已经存在了";  
       exit;  
   }  

   if(!move_uploaded_file ($filename, $destination))  
   {  
       echo "移动文件出错";  
       exit;  
   }  

   $pinfo=pathinfo($destination);  
   $fname=$pinfo[basename];  
   echo " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>".$destination_folder.$fname."</font><br>";  
   echo " 宽度:".$image_size[0];  
   echo " 长度:".$image_size[1];  
   echo "<br> 大小:".$file["size"]." bytes";  

   if($watermark==1)  
   {  
       $iinfo=getimagesize($destination,$iinfo);  
       $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);  
       $white=imagecolorallocate($nimage,255,255,255);  
       $black=imagecolorallocate($nimage,0,0,0);  
       $red=imagecolorallocate($nimage,255,0,0);  
       imagefill($nimage,0,0,$white);  
       switch ($iinfo[2])  
       {  
           case 1:  
           $simage =imagecreatefromgif($destination);  
           break;  
           case 2:  
           $simage =imagecreatefromjpeg($destination);  
           break;  
           case 3:  
           $simage =imagecreatefrompng($destination);  
           break;  
           case 6:  
           $simage =imagecreatefromwbmp($destination);  
           break;  
           default:  
           die("不支持的文件类型");  
           exit;  
       }  

       imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);  
       imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);  

       switch($watertype)  
       {  
           case 1:   //加水印字符串  
           imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);  
           break;  
           case 2:   //加水印图片  
           $simage1 =imagecreatefromgif("xplore.gif");  
           imagecopy($nimage,$simage1,0,0,0,0,85,15);  
           imagedestroy($simage1);  
           break;  
       }  

       switch ($iinfo[2])  
       {  
           case 1:  
           //imagegif($nimage, $destination);  
           imagejpeg($nimage, $destination);  
           break;  
           case 2:  
           imagejpeg($nimage, $destination);  
           break;  
           case 3:  
           imagepng($nimage, $destination);  
           break;  
           case 6:  
           imagewbmp($nimage, $destination);  
           //imagejpeg($nimage, $destination);  
           break;  
       }  

       //覆盖原上传文件  
       imagedestroy($nimage);  
       imagedestroy($simage);  
   }  

   if($imgpreview==1)  
   {  
   echo "<br>图片预览:<br>";  
   echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);  
   echo " alt="图片预览:r文件名:".$destination."r上传时间:">";  
   }  
}  
?>  
</body>  
</html>

PHP 相关文章推荐
收藏的一个php小偷的核心程序
Apr 09 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php 获取xml接口数据的处理方法
May 31 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
echo, print, printf 和 sprintf 区别
Dec 06 #PHP
PHP数字格式化
Dec 06 #PHP
用缓存实现静态页面的测试
Dec 06 #PHP
一些PHP写的小东西
Dec 06 #PHP
关于时间计算的结总
Dec 06 #PHP
一段防盗连的PHP代码
Dec 06 #PHP
PHP安全配置
Dec 06 #PHP
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
PHP循环结构实例讲解
2014/02/10 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python装饰器decorator介绍
2014/11/21 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
简单了解Django项目应用创建过程
2020/07/06 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
财经学院自荐信范文
2014/02/02 职场文书
运动会入场词50字
2014/02/20 职场文书
《影子》教学反思
2014/02/21 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
大雁塔英文导游词
2015/02/10 职场文书
居安思危观后感
2015/06/11 职场文书
初一英语教学反思
2016/02/15 职场文书
Python OpenCV快速入门教程
2021/04/17 Python