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 相关文章推荐
Apache2 httpd.conf 中文版
Dec 06 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
php如何计算两坐标点之间的距离
Dec 29 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
如何做到多笔资料的同步
2006/10/09 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
PHP Socket 编程
2010/04/09 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
详细介绍Python的鸭子类型
2016/09/12 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
python内置模块collections知识点总结
2019/12/19 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Spy++的使用方法及下载教程
2021/01/29 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
ktv总经理岗位职责
2014/02/17 职场文书
房屋继承公证书
2014/04/10 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
python 学习GCN图卷积神经网络
2022/05/11 Python