首頁  >  文章  >  後端開發  >  一定要搞懂PHP如何加入圖片浮水印

一定要搞懂PHP如何加入圖片浮水印

WBOY
WBOY原創
2021-10-20 14:59:436147瀏覽

在之前的文章中為大家帶來了《PHP中怎樣完成圖像的縮放和裁剪? (實例詳解)》,其中透過實例向大家介紹了在PHP中應該怎樣去進行圖形的縮放和裁剪,本篇文章繼續來看一看PHP中圖形處理的知識,我們應該怎樣給圖片增加水印。希望對大家有幫助!

一定要搞懂PHP如何加入圖片浮水印

在我們的日常生活中,為了不希望自己的圖片被盜用,經常能夠看到在一些圖片上添加水印,比如我們網站上,輸入圖片文件的話會自動在右下角加上一個浮水印,那麼這種浮水印效果是怎麼實現的呢?透過PHP就可以實現為圖片增加浮水印的效果。

在先前文章中將圖片裁剪放到目標圖上的操作和添加浮水印有些類似,為了實現添加浮水印,需要通過 imagecopymerge函數。

<strong><span style="font-size: 18px;">imagecopymerge</span></strong>#函數

##imagecopymerge函數的語法格式如下:

imagecopymerge($目标图片,$来源图片,$目标开始的x ,$目标开始的y,$来源的x ,$来源的y ,$来源的宽 ,$来源的高 ,$透明度)

其中透明度的值是0-100的整數,透明度的值越大,水印越不透明。


接下來我們透過實例來看一下應該如何為圖片增加浮水印:

首先準備了一個名為test.png的圖片和一個名為logo.png的水印圖片放到了我們的根目錄裡


一定要搞懂PHP如何加入圖片浮水印

注意上面這個是範例圖片,下面的水印並不是我添加的,是網站自動添加的,為了區分,實例的水印是下面這樣的

一定要搞懂PHP如何加入圖片浮水印一定要搞懂PHP如何加入圖片浮水印

那接下來,操作如下:


<?php
//打开目标图片
$dst = imagecreatefrompng(&#39;test.png&#39;);
//打开Logo来源图片
$src = imagecreatefrompng(&#39;logo.png&#39;);
//得到目标图片的宽高
$dst_info = getimagesize(&#39;test.png&#39;);
//得到logo图片的宽高
$src_info = getimagesize(&#39;logo.png&#39;);
//放到最右下脚可得出图片水印图片需要开始的位置即:
//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], 50);
header(&#39;Content-type:image/png&#39;);
imagepng($dst);
imagedestroy($dst);
imagedestroy($src);
?>

輸出結果:


一定要搞懂PHP如何加入圖片浮水印

由上述結果可以看出,透過imagecopymerge函數加入了一個透明度為50的水印。

拓展知識<strong>imagecopy<span style="font-size: 18px;"></span></strong>函數

不只使用imagecopymerge函數一種方法來加入浮水印,也能夠透過

 imagecopy() 函數,它能夠複製函數的一部分,它的語法格式如下:

imagecopy($目标图片, $来源图片,$目标图片x,$目标图片y,$来源图片x,$来源图片y,$来源图片宽,$来源图片高)

它的意思是,在來源圖片的(x,y)的地方選取寬為w,高為h的矩形區域到目標圖片的(x,y)上。


使用 PHP 中的 imagesx()、imagesy() 兩個函數來分別取得圖片的寬度和高度。它們的語法格式如下:

imagesx(resource $image)
imagesy(resource $image)

實例如下:


<?php
    function watermark($img, $watermark, $district = 0,$watermarkquality = 95){
        $imginfo = @getimagesize($img);
        $watermarkinfo = @getimagesize($watermark);
        $img_w = $imginfo[0];
        $img_h = $imginfo[1];
        $watermark_w = $watermarkinfo[0];
        $watermark_h = $watermarkinfo[1];
        if($district == 0) $district = rand(1,9);
        if(!is_int($district) OR 1 > $district OR $district > 9) $district = 9;
        switch($district){
            case 1:
                $x = +5;
                $y = +5;
                break;
            case 2:
                $x = ($img_w - $watermark_w) / 2;
                $y = +5;
                break;
            case 3:
                $x = $img_w - $watermark_w - 5;
                $y = +5;
                break;
            case 4:
                $x = +5;
                $y = ($img_h - $watermark_h) / 2;
                break;
            case 5:
                $x = ($img_w - $watermark_w) / 2;
                $y = ($img_h - $watermark_h) / 2;
                break;
            case 6:
                $x = $img_w - $watermark_w;
                $y = ($img_h - $watermark_h) / 2;
                break;
            case 7:
                $x = +5;
                $y = $img_h - $watermark_h - 5;
                break;
            case 8:
                $x = ($img_w - $watermark_w) / 2;
                $y = $img_h - $watermark_h - 5;
                break;
            case 9:
                $x = $img_w - $watermark_w - 5;
                $y = $img_h - $watermark_h - 5;
                break;
        }
        switch ($imginfo[2]) {
            case 1:
                $im = @imagecreatefromgif($img);
                break;
            case 2:
                $im = @imagecreatefromjpeg($img);
                break;
            case 3:
                $im = @imagecreatefrompng($img);
                break;
        }
        switch ($watermarkinfo[2]) {
            case 1:
                $watermark_logo = @imagecreatefromgif($watermark);
                break;
            case 2:
                $watermark_logo = @imagecreatefromjpeg($watermark);
                break;
            case 3:
                $watermark_logo = @imagecreatefrompng($watermark);
                break;
        }
        if(!$im or !$watermark_logo) return false;
        $dim = @imagecreatetruecolor($img_w, $img_h);
        if(@imagecopy($dim, $im, 0, 0, 0, 0,$img_w,$img_h )){
            imagecopy($dim, $watermark_logo, $x, $y, 0, 0, $watermark_w, $watermark_h);
        }
        $file = dirname($img) . &#39;/w&#39; . basename($img);
        $result = imagejpeg ($dim,$file,$watermarkquality);
        imagedestroy($watermark_logo);
        imagedestroy($dim);
        imagedestroy($im);
        if($result){
            echo $img.&#39; 水印添加成功&#39;;
            return;
        }
        else {
            return false;
        }
    }
    $file = &#39;test.png&#39;;   //待加水印的图片地址
    $water = &#39;logo.png&#39;;  //水印图片的地址
    watermark($file, $water);
?>

輸出結果:


一定要搞懂PHP如何加入圖片浮水印##效果如下:

一定要搞懂PHP如何加入圖片浮水印推薦學習:《

PHP影片教學

以上是一定要搞懂PHP如何加入圖片浮水印的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn