<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                生成水印是整個技術里面最簡單的一步。定位水印位置的時候涉及到一點點、最初淺的幾何知識。 而上一章我們學習了圖片的裁剪技術。水印只不過是圖片裁剪技術的一點點的小變形的體現。 一點點幾何上的重點知識: 1. 圖片大小 2. 圖片放在哪個坐標上 3. 圖片的寬高 圖片水印技術的核心相當于是兩張圖片:一張大圖;一張小圖。將小圖放置在大圖的某個位置上。 水印技術是這個里面最為簡單的一個技術,實現方式: 1. 打開原圖(也叫操作的目標圖片) 2. 打開水印圖(也叫水印來源圖片) 3. 使用 imagecopymerge 將小圖合并至大圖的指定位置 4. 輸出圖片 5. 銷毀資源 ##一、簡單圖片水印 需要加水印的目標圖片(假設存儲在我電腦的d:/www/img/meinv.jpg),圖片如下: ![document/2015-09-22/5600d61ee6dfc](http://box.kancloud.cn/document_2015-09-22_5600d61ee6dfc.png) 需要加上的logo圖片(假設存儲在我電腦的d:/www/img/logo.png),圖片如下: ![document/2015-09-22/5600ed86f1a65](http://box.kancloud.cn/document_2015-09-22_5600ed86f1a65.png) 最主要的是要使用這個函數: > bool imagecopymerge ( resource $目標圖片 , resource $來源圖片, int $目標開始的x , int $目標開始的y, int $來源的x , int $來源的y , int $來源的寬 , int $來源的高 , int $透明度) 注意: 透明度的值為0-100的整數。imagecopy和imagecopymerge的區別在于一個有透明度,一個沒有透明度。 按照總結的步驟,做一個簡單的方法: ~~~ <?php //打開目標圖片 $dst = imagecreatefrompng('d:/www/img/meinv.jpg'); //打開Logo來源圖片 $src = imagecreatefrompng('d:/www/img/logo.png'); //得到目標圖片的寬高 $dst_info = getimagesize('fbb.png'); //得到logo圖片的寬高 $src_info = getimagesize('logo.png'); //放到最右下腳可得出圖片水印圖片需要開始的位置即: //x點位置:需要大圖的寬 - 小圖的寬; //y點位置:放大圖的高 - 小圖的高 $dst_x = $dst_info[0] - $src_info[0]; $dst_y = $dst_info[1] - $src_info[1]; //要將圖片加在右下腳 imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 100); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst); imagedestroy($src); ?> ~~~ **我們看看最終的效果如下:** ![document/2015-09-22/5600ee0269dbf](http://box.kancloud.cn/document_2015-09-22_5600ee0269dbf.png) ##二、做一個智能的圖片水印函數 一、 我們可以做一個自動化打開圖片的函數 之前創建圖片或者打開圖片的函數我們都學習過: 1. imagecreate 2. imagecreatetruecolor 3. imagecreatefromjpeg等 我們來推理下下。我們如果能夠想辦法得到圖片的MIME類型,根據MIME類型找到打開該文件的函數就行了。 因此,做這一步分為兩塊來完成: 1. 得到文件MIME類型,返回類型。 2. 傳入路徑,打開函數,返回資源。 因此,上面兩塊,我們都可以做成兩個函數。 傳入圖片的路徑,將圖片的寬、高、圖片的MIME類型全部返回一個數組,需要的時候使用對應的參數即可。 我們可以將mime類型傳到到$data當中的type關聯數組中。代碼如下: ~~~ function getImageInfo($path) { $info = getimagesize($path); $data['width'] = $info[0]; $data['height'] = $info[1]; $data['type'] = $info['mime']; return $data; } ~~~ 打開文件的函數,傳入一個圖片的類型,傳入一個圖片的路徑就打開了圖片,返回成了資源類型。 下面的例子中,$type使用swithc...case進行判斷,如果是imagejpeg就使用imagecreatefromjpeg來打開$path中路徑指定的文件。最后,返回一個資源類型。 ~~~ function openImg($path, $type) { switch ($type) { case 'image/jpeg': case 'image/jpg': case 'image/pjpeg': $img = imagecreatefromjpeg($path); break; case 'image/png': case 'image/x-png': $img = imagecreatefrompng($path); break; case 'image/gif': $img = imagecreatefromgif($path); break; case 'image/wbmp': $img = imagecreatefromwbmp($path); break; default: exit('圖片類型不支持'); } return $img; } ~~~ 自動計算位置: 我們可將位置分為10個值,分別為0-9。 我們用畫圖來表示位置: ![document/2015-09-22/5600ef919671d](http://box.kancloud.cn/document_2015-09-22_5600ef919671d.png) 注: 0為隨機位置,可出現在頁面中的任意處。但是不能超過圖片的范圍。 0的位置為: x = 0 至 (大圖寬 - 小圖寬) y = 0 至 (大圖高 - 小圖高) 1的位置為: x = 0 y = 0 2的位置為: x = (大圖寬 - 小圖寬) /2 y = 0 3的位置為: x = 大圖寬 - 小圖寬 y = 0 4的位置為: x = 0 y = (大圖高 - 小圖高) / 2 ... ....依此類推。 我們來推理0-9的實現代碼: ~~~ switch($pos){ case 1: $x=0; $y=0; break; case 2: $x=ceil(($info['width']-$logo['width'])/2); $y=0; break; case 3: $x=$info['width']-$logo['width']; $y=0; break; case 4: $x=0; $y=ceil(($info['height']-$logo['height'])/2); break; case 5: $x=ceil(($info['width']-$logo['width'])/2); $y=ceil(($info['height']-$logo['height'])/2); break; case 6: $x=$info['width']-$logo['width']; $y=ceil(($info['height']-$logo['height'])/2); break; case 7: $x=0; $y=$info['height']-$logo['height']; break; case 8: $x=ceil(($info['width']-$logo['width'])/2); $y=$info['height']-$logo['height']; break; case 9: $x=$info['width']-$logo['width']; $y=$info['height']-$logo['height']; break; case 0: default: $x=mt_rand(0,$info['width']-$logo['width']); $y=mt_rand(0,$y=$info['height']-$logo['height']); break; } ~~~ 最后調用一下圖片的合并、輸出和銷毀代碼即可: > imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm); 我們將最終的代碼整合好后給大家實驗看效果: ~~~ <?php water('zxy.jpg','logo.gif',0,50); function water($img,$water,$pos=9,$tm=100){ $info=getImageInfo($img); $logo=getImageInfo($water); $dst=openImg($img,$info['type']); $src=openImg($water,$logo['type']); switch($pos){ case 1: $x=0; $y=0; break; case 2: $x=ceil(($info['width']-$logo['width'])/2); $y=0; break; case 3: $x=$info['width']-$logo['width']; $y=0; break; case 4: $x=0; $y=ceil(($info['height']-$logo['height'])/2); break; case 5: $x=ceil(($info['width']-$logo['width'])/2); $y=ceil(($info['height']-$logo['height'])/2); break; case 6: $x=$info['width']-$logo['width']; $y=ceil(($info['height']-$logo['height'])/2); break; case 7: $x=0; $y=$info['height']-$logo['height']; break; case 8: $x=ceil(($info['width']-$logo['width'])/2); $y=$info['height']-$logo['height']; break; case 9: $x=$info['width']-$logo['width']; $y=$info['height']-$logo['height']; break; case 0: default: $x=mt_rand(0,$info['width']-$logo['width']); $y=mt_rand(0,$y=$info['height']-$logo['height']); break; } imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm); imagejpeg($dst); imagedestory($dst); imagedestory($src); } function openImg($path,$type){ switch($type){ case 'image/jpeg': case 'image/jpg': case 'image/pjpeg': $img=imagecreatefromjpeg($path); break; case 'image/png': case 'image/x-png': $img=imagecreatefrompng($path); break; case 'image/gif': $img=imagecreatefromgif($path); break; case 'image/wbmp': $img=imagecreatefromwbmp($path); break; default: exit('圖片類型不支持'); } return $img; } ?> ~~~ *** 本文僅為技術人員交流學習、交流技術使用。 本文中所使用到的圖像: 1. 范冰冰女士的形象照片不可用于商業使用。所有權均為范冰冰女士及相關機構所有。 2. 本文中所使用到的logo歸百度公司所有。 特此聲明!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看