php实用图片水印效果代码

php实用图片水印效果代码
<?php

define('Water',1);//水印方式(0,文字水印,1图片水印)

define('WaterImg','./water.jpg');//水印图片地址

define('WaterNum',0);//水印位置,0为随机,1-9分别为顶左顶中顶右中左中中中右底左底中底右

define('WaterX',81);//水印长

define('WaterY',81);//水印高

define('WaterType','image/jpeg');//水印图片类型

define('WaterText','爱搜罗');//水印文字(必须先转换成UTF-8才能实现中文水印)

define('WaterTextColor','#000000');//水印文字颜色

define('WaterTextSize',50);//水印文字大小 px

define('WaterTextFont','C:WINDOWSFontsSIMFANG.TTF');//水印文字字体 (仿宋)

define('WaterPtc',50);//水印透明度

//////////////////////水印默认设置完毕

 

class water

{

    private $img;//图片地址   

    private $img_type;//图片类型   

    //private $img_mime;//图片实际类型

    private $img_x;//图片长   

    private $img_y;//图片高

    private $is_water;//是否可以添加水印,布尔

    private $water_img;//水印图片

    private $water_text;//图片文字(UTF-8)   

    private $water_num;//水印位置(可能用不着)

    private $water_w = WaterX;//water的宽

    private $water_h = WaterY ;//water的长

    private $water_x;//水印的x位置

    private $water_y;//水印的y位置

    private $src_x;//画布与water两图的长度差

    private $src_y;//画布与water两图的高度差

    private $err_msg;//图片地址

 

    public function __construct($img,$img_type)

    {

        if (file_exists($img) == FALSE)

        {

            $this->Err_Img('No_Img');

        }

        $this->img = $img;

        $this->img_type = $img_type;//写入图片类型

        $this->Check_GD();//检查GD库

        $this->Do_Water();//判断水印方式

       

        $this->Type_Img();//判断图片类型

    }

    /*

     * 检查GD库

     */

    public function Check_GD(){

        if (function_exists("gd_info") == FALSE)

        {

            $this->Err_Img('No_Gd');

        }

    }

    /*

     * 处理水印方式及water文件类型

     */

    public function Do_Water()

    {

        if (Water == 1)//图片水印

        {

            $this->Img_Water();//处理water图片

        }else{//文字水印

            $this->Text_xy();//处理文字水印图片

        }

    }

    /*

     * 处理water图片

     */

    public function Img_Water()

    {

        if (file_exists(WaterImg) == FALSE)

        {

            $this->Err_Img('No_WaterImg');

            //使用文字水印

        }

        switch (WaterType)

        {

            case 'image/jpeg':

                $this->water_img = imagecreatefromjpeg(WaterImg);

                break;

        }

    }

    /*

     * 获得文字的长宽 并 计算 两图的长宽差

     */

    public function Text_xy()

    {

        $str   = iconv('GB2312','UTF-8',WaterText);

        $temp = imagettfbbox(50,0,WaterTextFont,$str);//取得使用 TrueType 字体的文本的范围

        $w = $temp[2] - $temp[6];

        $h = $temp[3] - $temp[7];

        $this->src_x = $this->img_x - $w;

        $this->src_y = $this->img_y - $h;

    }

    /*

     * 判断图片是否能够添加水印,比较大小

     */

    public function Is_Water()

    {

        if (Water == 1)//图片水印

        {

            $this->src_x = $this->img_x - WaterX;

            $this->src_y = $this->img_y - WaterY;

            if ($this->src_x <= 0 && $this->src_y <= 0)

            {

                $this->Err_Img('Too_Small');

            }

        }else{//文字水印

            if ($this->src_x <= 0 && $this->src_y <=0)

            {

                $this->Err_Img('Too_Small');

            }

        }

    }

    /*

     * 处理水印位置

     *   得到 水印位置的坐标

     */

    public function Water_Num()

    {

        switch(WaterNum)

        {

            case 0://随机

                $this->water_x = rand(0,($this->img_x - $this->water_w));

                $this->water_y = rand(0,($this->img_y - $this->water_h));

                break;

            case 1://顶端居左

                $this->water_x = 0;

                $this->water_y = 0;

                break;

            case 2://顶端居中

                $this->water_x = ($this->img_x - $this->water_w)/2;

                $this->water_y = 0;

                break;

            case 3://顶端居右

                $this->water_x = $this->img_x - $this->water_w;

                $this->water_y = 0;

                break;

            case 4://中间居左

                $this->water_x = 0;

                $this->water_y = ($this->img_y - $this->water_h)/2;

                break;

            case 5://中间居中

                $this->water_x = ($this->img_x - $this->water_w)/2;

                $this->water_y = ($this->img_y - $this->water_h)/2;

                break;

            case 6://中间居右

                $this->water_x = $this->img_x - $this->water_w;

                $this->water_y = ($this->img_y - $this->water_h)/2;

                break;

            case 7://底部居左

                $this->water_x = 0;

                $this->water_y = $this->img_y - $this->water_h;

                break;

            case 8://底部居中

                $this->water_x = ($this->img_x - $this->water_w)/2;

                $this->water_y = $this->img_y - $this->water_h;

                break;

            case 9://底部居右

                $this->water_x = $this->img_x - $this->water_w;

                $this->water_y = $this->img_y - $this->water_h;

                break;

            default://随机

                $this->water_x = rand(0,($this->img_x - $this->water_w));

                $this->water_y = rand(0,($this->img_y - $this->water_h));

        }

    }

    /*

     * 判断图片类型

     */

    public function Type_Img()

    {

        switch ($this->img_type)

            {

                case 'image/jpeg':

                    header("Content-type: image/jpeg");

                    $this->img = imagecreatefromjpeg($this->img);

                    break;

            }

            $this->Img_Water();//处理water图片

            $this->img_x = imagesx($this->img);

            $this->img_y = imagesy($this->img);

            $this->Water_Num();//判断水印位置

            $this->Is_Water();

            $this->Make_img();

    }

    /*

     * 制作图片水印

     */

    public function Make_img(){

                imagecopymerge($this->img,$this->water_img,$this->water_x,$this->water_y,0,0,WaterX,WaterY,WaterPtc);

                imagejpeg($this->img);

    }

    /*

     * 制作文字水印

     */

    public function Make_Text()

    {

                echo '测试';

    }

    /*

     * 返回错误信息

     */

    public function Err_Img($msg)

    {

        switch($msg)

        {

            case 'No_Gd':

                $this->err_msg = '没有安装GD库';

                break;

            case 'No_Img':

                $this->err_msg = '图片不存在';

                break;

            case 'No_WaterImg':

                $this->err_msg = 'water图片不存在';

                break;

            case 'Too_Small':

                $this->err_msg = '图片过小';

                break;

        }

        die($this->err_msg);//输出错误信息

    }

    public function __destruct()

    {

        imagedestroy($this->img);

        imagedestroy($this->img_water);

    }

}

 

$img = new water('./100.jpg','image/jpeg');//实例化

 

?>

时间: 2024-12-27 08:43:48

php实用图片水印效果代码的相关文章

java给图片加水印效果代码

以前用到的java给图片加水印效果代码都有些小问题,今天我们修正了里面的问题 增加了补白的功能 重构了代码 import java.awt.alphacomposite; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image; import java.awt.geom.affinetransform; import java.awt.image.affinetr

Jquery图片缩放效果代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-

三款Jquery图片放大镜效果代码

本文章是利用了jquery图片放大镜效果插件来实例图片放大,下面我们收藏了三款效果的实例,看看那款适合你哦. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&qu

js+div实现文字滚动和图片切换效果代码_javascript技巧

本文实例讲述了js+div实现文字滚动和图片切换效果代码.分享给大家供大家参考.具体如下: 这里演示js+div文字滚动和图片切换代码,为了演示方便,去掉了图片调用,用数字代替了,用时候再加上就可以了,本效果实现了两种效果,Div切换,TAB切换,和文字滚动,鼠标移上后文字停止滚动,两种功能可任意剥离出来,这不影响代码使用. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-div-txt-pic-scroll-cha-style-codes

jquery的幻灯片图片切换效果代码分享_jquery

本文实例讲述了jquery的幻灯片图片切换效果.分享给大家供大家参考.具体如下: 这是一款基于jquery的幻灯片图片切换效果代码,有缩略图和标题,可以自定义标题. 运行效果图:     -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. (1)在head区域引入CSS样式: <LINK rel=stylesheet type=text/css href="css/lrtk.css&quo

jquery实现LED广告牌旋转系统图片切换效果代码分享_jquery

本文实例讲述了jquery实现LED广告牌旋转系统图片切换效果,分享给大家供大家参考.具体如下: js模拟路边巨大显示屏上广告切换效果,不得不相信js做到了,而且让你无话可说的逼真效果. LED广告显示器上图片切换效果,场景也类似,效果相当震撼看得我目瞪口呆,热爱特效的你可不要错过哈! 运行效果图: -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的jquery实现LED广告牌旋转

js鼠标点击图片切换效果代码分享_javascript技巧

本文实例讲述了js鼠标点击图片切换效果.分享给大家供大家参考.具体如下: 实现原理很简单,其实是多张图片叠加起来,点击图片后依次赋予图片一个class,使其看起来在表面而已,点击图片,可以实现图片的不断切换效果. 运行效果图:                                      -------------------查看效果------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的js鼠标点击图片切换效果代码如下 <hea

js钢琴按钮波浪式图片排列效果代码分享_javascript技巧

本文实例讲述了js钢琴按钮波浪式图片排列效果.分享给大家供大家参考.具体如下: 这是一款基于javascript实现的钢琴按钮波浪式图片排列效果,鼠标在图片列表上移动,当前图片高亮显示,以此为根基点,周围的图片逐渐变小,所以有种手指划过钢琴键盘的感觉. 运行效果图:                                -------------------查看效果------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 注意:图片的alt属性不能

js带前后翻页的图片切换效果代码分享_javascript技巧

本文实例讲述了javascript带前后翻页的图片切换效果.分享给大家供大家参考.具体如下: 这是一款基于javascript带前后翻页的图片切换效果代码,实现过程很简单. 运行效果图: -------------------查看效果------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 在head区域引入CSS样式: <link href="css/css.css" rel="stylesheet" type=&qu