设为首页收藏本站language 语言切换
查看: 1899|回复: 0
收起左侧

经典的给图片加水印程序

[复制链接]
发表于 2010-2-24 13:43:57 | 显示全部楼层 |阅读模式
以前也看过ASP给上传图片加水印的程序,但是看了这篇文章后我觉得真的很经典,在这里推荐给大家!<BR>如果对PHP的GD库比较熟悉,看懂这篇文章一点都不难了!<BR><BR><OL><LI><CODE><FONT face=新宋体>&lt;?php</FONT></CODE><LI><CODE><FONT face=新宋体>/******************************************************************************</FONT></CODE><LI><LI><CODE><FONT face=新宋体>参数说明:</FONT></CODE><LI><CODE><FONT face=新宋体>$max_file_size  : 上传文件大小限制, 单位BYTE</FONT></CODE><LI><CODE><FONT face=新宋体>$destination_folder : 上传文件路径</FONT></CODE><LI><CODE><FONT face=新宋体>$watermark   : 是否附加水印(1为加水印,其他为不加水印);</FONT></CODE><LI><LI><CODE><FONT face=新宋体>使用说明:</FONT></CODE><LI><CODE><FONT face=新宋体>1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;</FONT></CODE><LI><CODE><FONT face=新宋体>2. 将extension_dir =改为你的php_gd2.dll所在目录;</FONT></CODE><LI><CODE><FONT face=新宋体>******************************************************************************/</FONT></CODE><LI><LI><CODE><FONT face=新宋体>//上传文件类型列表</FONT></CODE><LI><CODE><FONT face=新宋体>$uptypes=array(</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/jpg', </FONT></CODE><LI><CODE><FONT face=新宋体>    'image/jpeg',</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/png',</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/pjpeg',</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/gif',</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/bmp',</FONT></CODE><LI><CODE><FONT face=新宋体>    'image/x-png'</FONT></CODE><LI><CODE><FONT face=新宋体>);</FONT></CODE><LI><LI><CODE><FONT face=新宋体>$max_file_size=2000000;     //上传文件大小限制, 单位BYTE</FONT></CODE><LI><CODE><FONT face=新宋体>$destination_folder="uploadimg/"; //上传文件路径</FONT></CODE><LI><CODE><FONT face=新宋体>$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);</FONT></CODE><LI><CODE><FONT face=新宋体>$watertype=1;      //水印类型(1为文字,2为图片)</FONT></CODE><LI><CODE><FONT face=新宋体>$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);</FONT></CODE><LI><CODE><FONT face=新宋体>$waterstring="http://www.xplore.cn/";  //水印字符串</FONT></CODE><LI><CODE><FONT face=新宋体>$waterimg="xplore.gif";    //水印图片</FONT></CODE><LI><CODE><FONT face=新宋体>$imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);</FONT></CODE><LI><CODE><FONT face=新宋体>$imgpreviewsize=1/2;    //缩略图比例</FONT></CODE><LI><CODE><FONT face=新宋体>?&gt;</FONT></CODE></LI></OL><RE>&lt;html&gt;&lt;head&gt;&lt;title&gt;ZwelL图片上传程序&lt;/title&gt;&lt;style type="text/css"&gt;&lt;!--body{     font-size: 9pt;}input{     background-color: #66CCFF;     border: 1px inset #CCCCCC;}--&gt;&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;form enctype="multipart/form-data" method="post" name="upform"&gt;  上传文件:  &lt;input name="upfile" type="file"&gt;  &lt;input type="submit" value="上传"&gt;&lt;br&gt;  允许上传的文件类型为:</PRE>&lt;? <RE>=implode(', ',$uptypes)?&gt;&lt;/form&gt;</PRE><OL><LI><CODE><FONT face=新宋体>&lt;?php</FONT></CODE><LI><CODE><FONT face=新宋体>if ($_SERVER['REQUEST_METHOD'] == 'POST')</FONT></CODE><LI><CODE><FONT face=新宋体>{</FONT></CODE><LI><CODE><FONT face=新宋体>    if (!<A href="http://www.php.net/manual/zh/function.is_uploaded_file"><U><FONT color=#0000ff>is_uploaded_file</FONT></U></A>($_FILES["upfile"][tmp_name]))</FONT></CODE><LI><CODE><FONT face=新宋体>    //是否存在文件</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>         echo "图片不存在!";</FONT></CODE><LI><CODE><FONT face=新宋体>         exit;</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    $file = $_FILES["upfile"];</FONT></CODE><LI><CODE><FONT face=新宋体>    if($max_file_size &lt; $file["size"])</FONT></CODE><LI><CODE><FONT face=新宋体>    //检查文件大小</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        echo "文件太大!";</FONT></CODE><LI><CODE><FONT face=新宋体>        exit;</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    if(!<A href="http://www.php.net/manual/zh/function.in_array"><U><FONT color=#0000ff>in_array</FONT></U></A>($file["type"], $uptypes))</FONT></CODE><LI><CODE><FONT face=新宋体>    //检查文件类型</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        echo "文件类型不符!".$file["type"];</FONT></CODE><LI><CODE><FONT face=新宋体>        exit;</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    if(!<A href="http://www.php.net/manual/zh/function.file_exists"><U><FONT color=#0000ff>file_exists</FONT></U></A>($destination_folder))</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.mkdir"><U><FONT color=#0000ff>mkdir</FONT></U></A>($destination_folder);</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    $filename=$file["tmp_name"];</FONT></CODE><LI><CODE><FONT face=新宋体>    $image_size = <A href="http://www.php.net/manual/zh/function.getimagesize"><U><FONT color=#0000ff>getimagesize</FONT></U></A>($filename);</FONT></CODE><LI><CODE><FONT face=新宋体>    $pinfo=<A href="http://www.php.net/manual/zh/function.pathinfo"><U><FONT color=#0000ff>pathinfo</FONT></U></A>($file["name"]);</FONT></CODE><LI><CODE><FONT face=新宋体>    $ftype=$pinfo['extension'];</FONT></CODE><LI><CODE><FONT face=新宋体>    $destination = $destination_folder.<A href="http://www.php.net/manual/zh/function.time"><U><FONT color=#0000ff>time</FONT></U></A>().".".$ftype;</FONT></CODE><LI><CODE><FONT face=新宋体>    if (<A href="http://www.php.net/manual/zh/function.file_exists"><U><FONT color=#0000ff>file_exists</FONT></U></A>($destination) &amp;&amp; $overwrite != true)</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        echo "同名文件已经存在了";</FONT></CODE><LI><CODE><FONT face=新宋体>        exit;</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    if(!<A href="http://www.php.net/manual/zh/function.move_uploaded_file"><U><FONT color=#0000ff>move_uploaded_file</FONT></U></A> ($filename, $destination))</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        echo "移动文件出错";</FONT></CODE><LI><CODE><FONT face=新宋体>        exit;</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    $pinfo=<A href="http://www.php.net/manual/zh/function.pathinfo"><U><FONT color=#0000ff>pathinfo</FONT></U></A>($destination);</FONT></CODE><LI><CODE><FONT face=新宋体>    $fname=$pinfo[basename];</FONT></CODE><LI><CODE><FONT face=新宋体>    echo " &lt;font color=red&gt;已经成功上传&lt;/font&gt;&lt;br&gt;文件名:</FONT></CODE><LI><LI><CODE><FONT face=新宋体>  &lt;font color=blue&gt;".$destination_folder.$fname."&lt;/font&gt;&lt;br&gt;";</FONT></CODE><LI><CODE><FONT face=新宋体>    echo " 宽度:".$image_size[0];</FONT></CODE><LI><CODE><FONT face=新宋体>    echo " 长度:".$image_size[1];</FONT></CODE><LI><CODE><FONT face=新宋体>    echo "&lt;br&gt; 大小:".$file["size"]." bytes";</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    if($watermark==1)</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>        $iinfo=<A href="http://www.php.net/manual/zh/function.getimagesize"><U><FONT color=#0000ff>getimagesize</FONT></U></A>($destination,$iinfo);</FONT></CODE><LI><CODE><FONT face=新宋体>        $nimage=<A href="http://www.php.net/manual/zh/function.imagecreatetruecolor"><U><FONT color=#0000ff>imagecreatetruecolor</FONT></U></A>($image_size[0],$image_size[1]);</FONT></CODE><LI><CODE><FONT face=新宋体>        $white=<A href="http://www.php.net/manual/zh/function.imagecolorallocate"><U><FONT color=#0000ff>imagecolorallocate</FONT></U></A>($nimage,255,255,255);</FONT></CODE><LI><CODE><FONT face=新宋体>        $black=<A href="http://www.php.net/manual/zh/function.imagecolorallocate"><U><FONT color=#0000ff>imagecolorallocate</FONT></U></A>($nimage,0,0,0);</FONT></CODE><LI><CODE><FONT face=新宋体>        $red=<A href="http://www.php.net/manual/zh/function.imagecolorallocate"><U><FONT color=#0000ff>imagecolorallocate</FONT></U></A>($nimage,255,0,0);</FONT></CODE><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.imagefill"><U><FONT color=#0000ff>imagefill</FONT></U></A>($nimage,0,0,$white);</FONT></CODE><LI><CODE><FONT face=新宋体>        switch ($iinfo[2])</FONT></CODE><LI><CODE><FONT face=新宋体>        {</FONT></CODE><LI><CODE><FONT face=新宋体>            case 1:</FONT></CODE><LI><CODE><FONT face=新宋体>            $simage =<A href="http://www.php.net/manual/zh/function.imagecreatefromgif"><U><FONT color=#0000ff>imagecreatefromgif</FONT></U></A>($destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 2:</FONT></CODE><LI><CODE><FONT face=新宋体>            $simage =<A href="http://www.php.net/manual/zh/function.imagecreatefromjpeg"><U><FONT color=#0000ff>imagecreatefromjpeg</FONT></U></A>($destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 3:</FONT></CODE><LI><CODE><FONT face=新宋体>            $simage =<A href="http://www.php.net/manual/zh/function.imagecreatefrompng"><U><FONT color=#0000ff>imagecreatefrompng</FONT></U></A>($destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 6:</FONT></CODE><LI><CODE><FONT face=新宋体>            $simage =<A href="http://www.php.net/manual/zh/function.imagecreatefromwbmp"><U><FONT color=#0000ff>imagecreatefromwbmp</FONT></U></A>($destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            default:</FONT></CODE><LI><CODE><FONT face=新宋体>            die("不支持的文件类型");</FONT></CODE><LI><CODE><FONT face=新宋体>            exit;</FONT></CODE><LI><CODE><FONT face=新宋体>        }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.imagecopy"><U><FONT color=#0000ff>imagecopy</FONT></U></A>($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);</FONT></CODE><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.imagefilledrectangle"><U><FONT color=#0000ff>imagefilledrectangle</FONT></U></A>($nimage,1,$image_size[1]-15,80,$image_size[1],$white);</FONT></CODE><LI><LI><CODE><FONT face=新宋体>        switch($watertype)</FONT></CODE><LI><CODE><FONT face=新宋体>        {</FONT></CODE><LI><CODE><FONT face=新宋体>            case 1:   //加水印字符串</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagestring"><U><FONT color=#0000ff>imagestring</FONT></U></A>($nimage,2,3,$image_size[1]-15,$waterstring,$black);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 2:   //加水印图片</FONT></CODE><LI><CODE><FONT face=新宋体>            $simage1 =<A href="http://www.php.net/manual/zh/function.imagecreatefromgif"><U><FONT color=#0000ff>imagecreatefromgif</FONT></U></A>("xplore.gif");</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagecopy"><U><FONT color=#0000ff>imagecopy</FONT></U></A>($nimage,$simage1,0,0,0,0,85,15);</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagedestroy"><U><FONT color=#0000ff>imagedestroy</FONT></U></A>($simage1);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>        }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>        switch ($iinfo[2])</FONT></CODE><LI><CODE><FONT face=新宋体>        {</FONT></CODE><LI><CODE><FONT face=新宋体>            case 1:</FONT></CODE><LI><CODE><FONT face=新宋体>            //imagegif($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagejpeg"><U><FONT color=#0000ff>imagejpeg</FONT></U></A>($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 2:</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagejpeg"><U><FONT color=#0000ff>imagejpeg</FONT></U></A>($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 3:</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagepng"><U><FONT color=#0000ff>imagepng</FONT></U></A>($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>            case 6:</FONT></CODE><LI><CODE><FONT face=新宋体>            <A href="http://www.php.net/manual/zh/function.imagewbmp"><U><FONT color=#0000ff>imagewbmp</FONT></U></A>($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            //imagejpeg($nimage, $destination);</FONT></CODE><LI><CODE><FONT face=新宋体>            break;</FONT></CODE><LI><CODE><FONT face=新宋体>        }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>        //覆盖原上传文件</FONT></CODE><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.imagedestroy"><U><FONT color=#0000ff>imagedestroy</FONT></U></A>($nimage);</FONT></CODE><LI><CODE><FONT face=新宋体>        <A href="http://www.php.net/manual/zh/function.imagedestroy"><U><FONT color=#0000ff>imagedestroy</FONT></U></A>($simage);</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><LI><CODE><FONT face=新宋体>    if($imgpreview==1)</FONT></CODE><LI><CODE><FONT face=新宋体>    {</FONT></CODE><LI><CODE><FONT face=新宋体>    echo "&lt;br&gt;图片预览:&lt;br&gt;";</FONT></CODE><LI><CODE><FONT face=新宋体>    echo "&lt;img src=\"".$destination."\" width=".($image_size[0]*</FONT></CODE><LI><LI><CODE><FONT face=新宋体>$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);</FONT></CODE><LI><CODE><FONT face=新宋体>    echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\"&gt;";</FONT></CODE><LI><CODE><FONT face=新宋体>    }</FONT></CODE><LI><CODE><FONT face=新宋体>}</FONT></CODE><LI><CODE><FONT face=新宋体>?&gt;</FONT></CODE></LI></OL><RE>&lt;/body&gt;&lt;/html&gt;最后我觉得有必要说一下给图片加水印的原理:取得上传的文件信息,建立一个真彩色图象,分配颜色方案并且填充图像。通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,<BR>以备写入imagestring()或是原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面。</PRE>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-8 23:54 , Processed in 0.077457 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表