添加到QQ书签 | 设为首页 | 加入收藏 | 繁體中文 | 网站地图
 | 网站首页 | QQ空间大图 | QQ空间FLASH模块 | QQ闪字表情 | QQ系列 | QQ下载 | 博客系列 | 完美图片 | 游戏秘籍 | 基础教程 | 
 | 精美字体 | 精品娃娃 | 个性签名 | 动感图片 | 制作素材 | 边框线条 | 视频·搞笑图片 | 基础知识 | 网页设计 | 
推 荐 阅 读
  • 没有推荐文章
  • 阅 读 排 行
    ·网页鼠标特效:在鼠标后面…
    ·在文本框默认自动输入当前…
    ·网页图片特效:图片动态水…
    ·网页鼠标特效:黑暗火光
    ·CSS基础知识:样式表CSS中…
    ·PHP源代码:图片加入文字…
    ·PHP源代码:Email图片生成
    ·CSS解决图片下有空隙
    ·纯CSS制作的网页中的ligh…
    ·网页图片鼠标动作特效:图…
    ·在线处理示意等待的AJAX动…
    ·11个图片上传加水印PHP源…
    ·CSS实现排版段落前面空两…
    ·网页时间特效:漂亮的脚本…
    ·PHP源代码:在图片上添加…
    ·DIV和CSS排版中制作细线条…
    ·CSS样式表参考:常用的CS…
    ·CSS优化:网页技术CSS的f…
    ·网页相册图片特效:矩阵鼠…
    ·PHP创建文字图片源码
     
    11个图片上传加水印PHP源代码 【字体:
     您现在的位置: QQ宝页站 >> 网页设计 >> PHP >> 正文 添加到百度搜藏 添加到QQ书签
     作者:佚名    文章来源:不详    点击数:    更新时间:2008-7-25  

    <?

     function _countMaskPos()
        {
            if($this->_isFull())
            {
                switch($this->mask_position)
                {
                    case 1:
                        // 左上
                        $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
                        $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
                        break;
     
                    case 2:
                        // 左下
                        $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
                        $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
                        break;
     
                    case 3:
                        // 右上
                        $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
                        $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
                        break;
     
                    case 4:
                        // 右下
                        $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
                        $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
                        break;
     
                    default:
                        // 默认将水印放到右下,偏移指定像素
                        $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
                        $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
                        break;
                }
            }
            else
            {
                switch($this->mask_position)
                {
                    case 1:
                        // 左上
                        $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
                        $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
                        break;
     
                    case 2:
                        // 左下
                        $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
                        $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
                        break;
     
                    case 3:
                        // 右上
                        $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
                        $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
                        break;
     
                    case 4:
                        // 右下
                        $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
                        $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
                        break;
     
                    default:
                        // 默认将水印放到右下,偏移指定像素
                        $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
                        $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
                        break;
                }
            }
        }
     
        /**
         * 设置字体信息
         */
        function _setFontInfo()
        {
            if(is_numeric($this->font))
            {
                $this->font_w  = imagefontwidth($this->font);
                $this->font_h  = imagefontheight($this->font);
     
                // 计算水印字体所占宽高
                $word_length   = strlen($this->mask_word);
                $this->mask_w  = $this->font_w*$word_length;
                $this->mask_h  = $this->font_h;
            }
            else
            {
                $arr = imagettfbbox ($this->font_size,0, $this->font,$this->mask_word);
                $this->mask_w  = abs($arr[0] - $arr[2]);
                $this->mask_h  = abs($arr[7] - $arr[1]);
            }
        }
     
        /**
         * 设置新图尺寸
         *
         * @param    integer     $img_w   目标宽度
         * @param    integer     $img_h   目标高度
         */
        function _setNewImgSize($img_w, $img_h=null)
        {
            $num = func_num_args();
            if(1 == $num)
            {
                $this->img_scale = $img_w;// 宽度作为比例
                $this->fill_w = round($this->src_w * $this->img_scale / 100) - $this->img_border_size*2;
                $this->fill_h = round($this->src_h * $this->img_scale / 100) - $this->img_border_size*2;
     
                // 源文件起始坐标
                $this->src_x  = 0;
                $this->src_y  = 0;
                $this->copy_w = $this->src_w;
                $this->copy_h = $this->src_h;
     
                // 目标尺寸
                $this->dst_w   = $this->fill_w + $this->img_border_size*2;
                $this->dst_h   = $this->fill_h + $this->img_border_size*2;
            }
     
            if(2 == $num)
            {
                $fill_w   = (int)$img_w - $this->img_border_size*2;
                $fill_h   = (int)$img_h - $this->img_border_size*2;
                if($fill_w < 0 || $fill_h < 0)
                {
                    die("图片边框过大,已超过了图片的宽度");
                }
                $rate_w = $this->src_w/$fill_w;
                $rate_h = $this->src_h/$fill_h;
     
                switch($this->cut_type)
                {
                    case 0:
                        // 如果原图大于缩略图,产生缩小,否则不缩小
                        if($rate_w < 1 && $rate_h < 1)
                        {
                            $this->fill_w = (int)$this->src_w;
                            $this->fill_h = (int)$this->src_h;
                        }
                        else
                        {
                            if($rate_w >= $rate_h)
                            {
                                $this->fill_w = (int)$fill_w;
                                $this->fill_h = round($this->src_h/$rate_w);
                            }
                            else
                            {
                                $this->fill_w = round($this->src_w/$rate_h);
                                $this->fill_h = (int)$fill_h;
                            }
                        }
     
                        $this->src_x  = 0;
                        $this->src_y  = 0;
     
                        $this->copy_w = $this->src_w;
                        $this->copy_h = $this->src_h;
     
                        // 目标尺寸
                        $this->dst_w   = $this->fill_w + $this->img_border_size*2;
                        $this->dst_h   = $this->fill_h + $this->img_border_size*2 - 10 ;//补偿round误差 消除白边;
                        break;
     
                    // 自动裁切
                    case 1:
                        // 如果图片是缩小剪切才进行操作
                        if($rate_w >= 1 && $rate_h >=1)
                        {
                            if($this->src_w > $this->src_h)
                            {
                                $src_x = round($this->src_w-$this->src_h)/2;
                                $this->setSrcCutPosition($src_x, 0);
                                $this->setRectangleCut($fill_h, $fill_h);
     
                                $this->copy_w = $this->src_h;
                                $this->copy_h = $this->src_h;
                               
                            }
                            elseif($this->src_w < $this->src_h)
                            {
                                $src_y = round($this->src_h-$this->src_w)/2;
                                $this->setSrcCutPosition(0, $src_y);
                                $this->setRectangleCut($fill_w, $fill_h);
     
                                $this->copy_w = $this->src_w;
                                $this->copy_h = $this->src_w;
                            }
                            else
                            {
                                $this->setSrcCutPosition(0, 0);
                                $this->copy_w = $this->src_w;
                                $this->copy_h = $this->src_w;
                                $this->setRectangleCut($fill_w, $fill_h);
                            }
                        }
                        else
                        {
                            $this->setSrcCutPosition(0, 0);
                            $this->setRectangleCut($this->src_w, $this->src_h);
     
                            $this->copy_w = $this->src_w;
                            $this->copy_h = $this->src_h;
                        }
     
                        // 目标尺寸
                        $this->dst_w   = $this->fill_w + $this->img_border_size*2;
                        $this->dst_h   = $this->fill_h + $this->img_border_size*2;
                       
                        break;
     
                    // 手工裁切
                    case 2:
                        $this->copy_w = $this->fill_w;
                        $this->copy_h = $this->fill_h;
     
                        // 目标尺寸
                        $this->dst_w   = $this->fill_w + $this->img_border_size*2;
                        $this->dst_h   = $this->fill_h + $this->img_border_size*2;               
                       
                        break;
                    default:
                        break;
     
                }
            }
     
            // 目标文件起始坐标
            $this->start_x = $this->img_border_size;
            $this->start_y = $this->img_border_size;
        }
     
        /**
         * 检查水印图是否大于生成后的图片宽高
         */
        function _isFull()
        {
            Return (   $this->mask_w + $this->mask_offset_x > $this->fill_w
                    || $this->mask_h + $this->mask_offset_y > $this->fill_h)
                       ?true:false;
        }
     
        /**
         * 检查水印图是否超过原图
         */
        function _checkMaskValid()
        {
            if(    $this->mask_w + $this->mask_offset_x > $this->src_w
                || $this->mask_h + $this->mask_offset_y > $this->src_h)
            {
                die("水印图片尺寸大于原图,请缩小水印图");
            }
        }
     
        /**
         * 取得图片类型
         *
         * @param    string     $file_path    文件路径
         */
        function _getImgType($file_path)
        {
            $type_list = array("1"=>"gif","2"=>"jpg","3"=>"png","4"=>"swf","5" => "psd","6"=>"bmp","15"=>"wbmp");
            if(file_exists($file_path))
            {
                $img_info = @getimagesize ($file_path);
                if(isset($type_list[$img_info[2]]))
                {
                    Return $type_list[$img_info[2]];
                }
            }
            else
            {
                die("文件不存在,不能取得文件类型!");
            }
        }
     
        /**
         * 检查图片类型是否合法,调用了array_key_exists函数,此函数要求
         * php版本大于4.1.0
         *
         * @param    string     $img_type    文件类型
         */
        function _checkValid($img_type)
        {
            if(!array_key_exists($img_type, $this->all_type))
            {
                Return false;
            }
        }
     
        /**
         * 按指定路径生成目录
         *
         * @param    string     $path    路径
         */
        function _mkdirs($path)
        {
            $adir = explode('/',$path);
            $dirlist = '';
            $rootdir = array_shift($adir);
            if(($rootdir!='.'||$rootdir!='..')&&!file_exists($rootdir))
            {
                @mkdir($rootdir);
            }
            foreach($adir as $key=>$val)
            {
                if($val!='.'&&$val!='..')
                {
                    $dirlist .= "/".$val;
                    $dirpath = $rootdir.$dirlist;
                    if(!file_exists($dirpath))
                    {
                        @mkdir($dirpath);
                        @chmod($dirpath,0777);
                    }
                }
            }
        }
     
        /**
         * 垂直翻转
         *
         * @param    string     $src    图片源
         */
        function _flipV($src)
        {
            $src_x = $this->getImgWidth($src);
            $src_y = $this->getImgHeight($src);
     
            $new_im = imagecreatetruecolor($src_x, $src_y);
            for ($y = 0; $y < $src_y; $y++)
            {
                imagecopy($new_im, $src, 0, $src_y - $y - 1, 0, $y, $src_x, 1);
            }
            $this->h_src = $new_im;
        }
     
        /**
         * 水平翻转
         *
         * @param    string     $src    图片源
         */
        function _flipH($src)
        {
            $src_x = $this->getImgWidth($src);
            $src_y = $this->getImgHeight($src);
     
            $new_im = imagecreatetruecolor($src_x, $src_y);
            for ($x = 0; $x < $src_x; $x++)
            {
                imagecopy($new_im, $src, $src_x - $x - 1, 0, $x, 0, 1, $src_y);
            }
            $this->h_src = $new_im;
        }
    }
    ?>

    下面来看使用方法:

    require_once('lib/ImageHandler.phpcls');
    $imgHandler_Obj = new ImageHandler();

    /* 默认缩小放大 */
    $imgHandler_Obj->setSrcImg("img/xrk.jpg");
    $imgHandler_Obj->setDstImg("tmp/New_Image_0.jpg");
    $imgHandler_Obj->setCutType(0);
    // 指定缩放比例
    $imgHandler_Obj->createImg(20);//50 100 200 试试

     

    /* 1, 文字水印图片缩小
     
    $imgHandler_Obj->setSrcImg("img/xrk.jpg");
    $imgHandler_Obj->setMaskFont("Fonts/STXINGKA.TTF");
    $imgHandler_Obj->setMaskFontSize(15);
    $imgHandler_Obj->setMaskFontColor("#0061A7");
    $imgHandler_Obj->setMaskTxtPct(20);
    $imgHandler_Obj->setDstImgBorder(0,"#dddddd");
    $imgHandler_Objext = "Happy漫步者";
    //$str = mb_convert_encoding($imgHandler_Objext,"UTF-8","GBK");
    $imgHandler_Obj->setMaskWord($imgHandler_Objext);
     
    // 指定固定宽高 输出到浏览器
    $imgHandler_Obj->createImg(400,400);
    */

     


    /* 2, 加水印图片缩小
    $imgHandler_Obj->setSrcImg("img/test.jpg");
    $imgHandler_Obj->setDstImg("tmp/New_Image_2.jpg");
    $imgHandler_Obj->setMaskImg("img/t.gif");
    $imgHandler_Obj->setMaskPosition(0);//0为在图片右下角加入水印
    $imgHandler_Obj->setMaskImgPct(60);
    $imgHandler_Obj->setDstImgBorder(1,"#dddddd");
     
    // 指定缩放比例
    $imgHandler_Obj->createImg(400,400);
    */

     

    /* 3, 同步缩小
        $imgHandler_Obj->setSrcImg("img/test.jpg");
        $imgHandler_Obj->setCutType(0);//同步缩小
        $imgHandler_Obj->setDstImg("tmp/New_Image_3.jpg");
        $imgHandler_Obj->createImg(150,160);

     */

    /* 4, 剪裁图片
     $imgHandler_Obj->setSrcImg("img/test.jpg");
        $imgHandler_Obj->setCutType(2);//指明为手工裁切
        $imgHandler_Obj->setSrcCutPosition(50, 50);// 源图起点坐标
        $imgHandler_Obj->setRectangleCut(300, 200);// 裁切尺寸
        $imgHandler_Obj->setDstImg("tmp/New_Image_4.jpg");
        $imgHandler_Obj->createImg(300,200);
    */

    上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 


    Google
     
    文章录入:丹峰    责任编辑:丹峰 
  • 上一篇文章:

  • 下一篇文章:
  •  
    设为首页 / 加入收藏 / 联系站长 / 友情链接 / 本站动态 / 用户留言 / 版权申明
    QQ宝页站 www.QQBye.com 信息备案:粤ICP备06124483号