<ins id="nhtrr"><th id="nhtrr"></th></ins>

<cite id="nhtrr"><track id="nhtrr"></track></cite>

        <b id="nhtrr"><output id="nhtrr"><thead id="nhtrr"></thead></output></b><delect id="nhtrr"></delect>
          <delect id="nhtrr"></delect>

            歡迎加入EUCMS官方QQ交流群,與更多EUCMS用戶一起討論,共同發財!

            QQ群:1222386
            > 資訊中心 >> 建站技術 >>正文
            共享一個支撐gif動畫的水印函數類
            2021-01-02 36 0
            前端時分由于義務需求,謄寫了一個支撐gif動畫的水印類,類為php代碼,忘盛意的朋儕可以轉播共享,可是不要忘了附上版權,來自徐州億優科技

            以下為類的代碼片斷,我在截取了類中的一小段函數沒顯示,由于要確保全部的版權,有需求的朋儕可以加我義務QQ討?。?99375381

            <?php
            /**
            * 水印類,支撐GIF動畫  需求    MagickWandForPHP 擴展
            * 作者:張虹亮 icyzhl#yeah.net
            * $imagefile 源圖畫途徑
            * $string 水印文字
            * $options array類型,水印的樣式設置
                        ta array
                            str(string) 水印文字(需求UTF8名堂)
                            size:文字大小
                            position:
                                    int,int 數字必須準確位置

                            color:字體顏色 只能用網頁16進制方式表現 (如:#ff0000)或:auto,依照布景顏色自動調劑文字顏色(gif動畫有效)
                            blod:是不是粗體(true or false 現在不成用)
                            water_file(string) 水印圖畫文件
                            font (string) 字體文件
                        gif(bool) true 支撐GIF動畫,不然不支撐
                        format(string) 輸入圖畫的名堂,只能是 jpeg gif 和 png 中的一個
                       
            **/末尾界說支撐gif動畫水印的類稱謂
            class watermark {
                //設置機關函數
                function watermark($imagefile,$options) {
                    $this->wnd = NewMagickWand();
                    $this->imagefile = $imagefile;
                    if(!MagickReadImage( $this->wnd, $imagefile )) $this->error("kill","source image not finded");
                    $this->width    = MagickGetImageWidth($this->wnd);
                    $this->height    = MagickGetImageHeight($this->wnd);
                    $this->mime        = MagickGetImageMimeType($this->wnd);
                    $this->options    = $options;   
                    $this->image_number =  MagickGetNumberImages($this->wnd);
                }
               
            /**
            *
            * 設置gif動畫水印是文字照舊圖畫,雖然了,我這里不光光支撐gif動畫,也支撐文字,在類函數挪用的時間聲明便可
            *
            ***/

                function set_water_mode() {
                    foreach($this->options['ta'] as $key=>$option) {   
                        if(!empty($option['str'])) {
                            $str = trim($option['str']);
                            if(!empty($str)) {
                                $this->ta[$key]['water_file'] = false;   
                                $this->ta[$key]['water_mode'] = 'font';   
                                if($option['direction']) {
                                    $this->ta[$key]['str_arr'] = $this->str_nl($option['str']);
                                }   
                                $this->ta[$key]['str'] = $option['str'];
                            } else {
                                $this->ta[$key]['str'] = false;
                            }
                        } else {
                            $this->ta[$key]['str'] = false;
                        }
                       
                        if($this->ta[$key]['str']=== false) {
                            if(!empty($option['water_file'])) {
                                $this->ta[$key]['water_file'] = $option['water_file'];
                                $this->ta[$key]['water_mode'] = 'file';
                            } else {
                                $this->ta[$key]['water_file'] = false;
                            }
                        }
                       
                        if($this->ta[$key]['str'] === false && $this->ta[$key]['water_file'] === false ) $this->error("kill","water set error no fonts and no file");
                        else {
                            $this->dwand[$key] = NewDrawingWand();
                            if($this->ta[$key]['water_mode']=='font') {
                                if(!is_object($this->pwand[$key])) {$this->pwand[$key] = NewPixelWand();}
                               
                            }else {
                                if(!is_object($this->water_wnd[$key])) $this->water_wnd[$key] = NewMagickWand();
                                if(!MagickReadImage( $this->water_wnd[$key], $this->ta[$key]['water_file'] )) $this->error("kill","water image not finded");
                            }
                        }
                    }
                   
                }

            /**
            *
            * 設置水印字體樣式
            *
            **/   
                function set_style() {
                    foreach($this->options['ta'] as $key=>$option) {   

                        if($this->ta[$key]['water_mode']=='font') {
                            if($option['color']) {
                                if(!is_object($this->pwand[$key])) {$this->pwand[$key] = NewPixelWand();}
                                PixelSetColor($this->pwand[$key], $option['color']);
                            }
                           
                            if($option['angle']) {
                                $this->ta[$key]['angle'] = $option['angle'];
                            } else $this->ta[$key]['angle'] = 0;
                            if(file_exists($option['font'])) DrawSetFont($this->dwand[$key], $option['font']);
                            if($option['blod']) DrawSetFontWeight($this->dwand[$key],600);
                            DrawSetFontSize($this->dwand[$key], $option['size']?$option['size']:12);
                            DrawSetFillColor($this->dwand[$key], $this->pwand[$key]);
                        }
                   
                    }
                }

            /**
            *
            * 設置gif圖畫水印的位置
            *
            ***/   
                function set_position() {
                    foreach($this->options['ta'] as $key=>$option) {   
                       
                        //取得水印的高度和寬度
                        if($this->ta[$key]['water_mode']=='font') {
                            //$this->water_height = MagickGetStringHeight($this->wnd,$this->dwand,$this->str);
                            $this->ta[$key]['water_height'] = $option['size'];
                            if(empty($this->ta[$key]['water_height'])) $this->ta[$key]['water_height'] = MagickGetStringHeight($this->wnd,$this->dwand[$key],$this->ta[$key]['str']);
                            $this->ta[$key]['water_width']  = MagickGetStringWidth($this->wnd,$this->dwand[$key],$this->ta[$key]['str']);
                        } elseif($this->water_mode=='file') {
                            $this->ta[$key]['water_height'] = MagickGetImageHeight($this->water_wnd[$key]);
                            $this->ta[$key]['water_width']  = MagickGetImageWidth($this->water_wnd[$key]);
                        }
                        //邊距
                       
                        list($x,$y) = explode(',',$option['position']);
                        if(is_numeric($x) && is_numeric($y)) {
                            $this->ta[$key]['left'] = $x;
                            $this->ta[$key]['top'] = $y;
                        } else {
                            $this->ta[$key]['left'] = 0;
                            $this->ta[$key]['top'] = 0;
                        }
                        if(!$option['direction']) $this->ta[$key]['top'] += $this->ta[$key]['water_height'];
                    }
                   
                }
               
            /**
            *
            * 寫gif動畫水印到圖畫上
            *
            ***/
                function write() {
                    $this->set_water_mode();//必須是使用文字照舊圖畫水印
                    $this->set_style();//若是是文字設置文字的樣式
                    $this->set_position(); //必須水印的位置
                    $this->set_format();
                    MagickSetWandSize($this->wnd,$this->width,$this->height);
                    MagickSetFormat( $this->wnd, $this->format);
                    $this->wnd = MagickCoalesceImages($this->wnd);
                   
                    foreach($this->options['ta'] as $key=>$option) {   
                   
                        //$this->dwand[$key] = NewDrawingWand();
                        if($this->ta[$key]['water_mode'] == 'font') {

                            MagickSetImageIndex($this->wnd,0);

                            $this->annotation($key);
                       
                            if($this->options['gif']) {
                                while(MagickNextImage($this->wnd)) {
                                    $this->annotation($key);
                                }
                            }
                        } elseif ($this->ta[$key]['water_mode'] == 'file') {
                            if($this->options['gif']) {
                                $this->wnd = MagickCoalesceImages($this->wnd);
                                MagickSetImageIndex($this->wnd,0);
                                MagickCompositeImage($this->wnd ,$this->water_wnd[$key]  ,MW_AtopCompositeOp,$this->ta[$key]['left'],$this->ta[$key]['top']);
                                while(MagickNextImage($this->wnd)) {
                                    MagickCompositeImage($this->wnd ,$this->water_wnd[$key]  ,MW_AtopCompositeOp,$this->ta[$key]['left'],$this->ta[$key]['top']);
                                }
                            } else MagickCompositeImage($this->wnd ,$this->water_wnd[$key]  ,MW_AtopCompositeOp,$this->ta[$key]['left'],$this->ta[$key]['top']);
                           
                        }
                    }
                    $this->is_write = true;
                }
               
            /**
            *
            *輸入圖畫
            *
            ***/   
                function putout($filenam='') {
                    if(!$this->is_write) $this->write();
                    header( "Content-Type: image/{$this->format}" );
                    if($this->options['gif'])  MagickEchoImagesBlob( $this->wnd );
                    else MagickEchoImageBlob( $this->wnd );
                }
               
                function error($error_flag,$info){
                    if($error_flag == 'kill') die("$info");
                }

            /**
            *
            * 設置輸入圖畫名堂gif
            *
            **/
                function set_format() {
                    $format_list = array('gif','jpeg','png');
                    if($this->options['gif'] && $this->image_number>1) {
                        $this->format = 'gif';
                        return;
                    }
                    if(in_array($this->options['format'],$format_list)) $this->format = $this->options['format'];
                    else {
                        if($this->mime) {
                            foreach ($format_list as $v) {
                                //echo $this->format.$v.'|'.$this->mime;
                                if(strpos($this->mime,$v)!==false) {$this->format = $v; break;}
                            }
                        } else $this->format = 'jpeg';
                           
                    }
                    if(empty($this->format)) $this->format = 'jpeg';
                }
               
                function str_nl($str) {
               
                    $strlen =  mb_strlen($str,"UTF-8");
                   
                    for($i=0;$i<$strlen;$i++) {
                        $v = mb_substr($str,$i,1,"UTF-8");
                        if(!preg_match("/^[a-zA-Z0-9]+$/",$v) && $v!=' ') $word .= " ".$v." ";
                        else $word .= $v;
                    }
                   
                    $reword = str_replace("  "," ",$word);
                    while($word != $reword){
                        $word = $reword;
                        $reword = str_replace("  "," ",$word);
                    }
                   
                    $words =  explode(" ",$word);
                    foreach($words as $k=>$v) {
                        $v = trim($v);
                        if(empty($v)) unset($words[$k]);
                    }
                    return $words;
                }
                //這里省略了一個函數,也是該類的主要函數之一
            }
            ?>

            再次聲明:上述類文件中我增加了一個函數,若是有需求請聯絡我自己討取全部類的內容,支撐gif動畫的類水印就寫到這里

             

            你覺得這篇文章怎么樣?

            0 0
            參與討論
            請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
            成品站
            購買流程
          1. 注冊會員
          2. 選擇網站模板
          3. 免費開通試用
          4. 綁定域名試用
          5. 選擇套餐
          6. 付款轉正
          7. 域名正式生效
          8. 網站正式上線
          9. 分站:
            掃描關注微信

            掃描加微信

            13852154923

            0516-66628816

            工作日 9:00-12:00 13:30-18:00
            周六及部分節假日提供值班服務
            2186398
            群:1222386
            免費做網站 整形網 德國王牌建材
            Copyright@2003-2021 EUCMS智能建站平臺版權所有 Powered by EUCMS-v6.3 | 網站地圖 蘇ICP備13022644號
            噗呲噗呲捣出白沫蜜汁