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之第五天
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
php 一元分词算法
Nov 30 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
详解PHP错误日志的获取方法
Jul 20 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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根据某字段对多维数组进行排序的方法
2015/03/07 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
常用的javascript设计模式
2017/01/11 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
浅谈flask源码之请求过程
2018/07/26 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
python实现图片转字符画的完整代码
2021/02/21 Python
养生餐厅创业计划书范文
2014/03/26 职场文书
校长个人总结
2015/03/03 职场文书
离婚起诉书范本
2015/05/18 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
Python基础详解之描述符
2021/04/28 Python