>  기사  >  백엔드 개발  >  PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.

PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.

WBOY
WBOY원래의
2021-10-20 14:59:436147검색

이전 글에서 "PHP에서 이미지를 확대/축소하고 자르는 방법은?"을 가져왔습니다. (자세한 예) "에서는 PHP에서 그래픽을 확대/축소하고 자르는 방법을 예제를 통해 소개합니다. 이 기사에서는 계속해서 PHP의 그래픽 처리에 대한 지식과 이미지에 워터마크를 추가하는 방법을 살펴봅니다. 모두에게 도움이 되기를 바랍니다!

PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.

우리는 일상생활에서 사진 도난을 방지하기 위해 일부 사진에 워터마크가 추가되는 것을 종종 볼 수 있습니다. 예를 들어, 저희 웹사이트에서는 사진 파일을 입력하면 자동으로 워터마크가 추가됩니다. 그러면 이 워터마크 효과는 어떻게 달성되나요? 이미지에 워터마크를 추가하는 효과는 PHP를 통해 얻을 수 있습니다.

이전 글에서 이미지를 잘라 대상 이미지에 배치하는 작업은 워터마크를 추가하는 것과 다소 비슷합니다.

<strong><span style="font-size: 18px;">이미지 복사 병합</span></strong> 기능<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><span style="font-size: 18px;">imagecopy</span></strong>函数

不止使用imagecopymerge函数一种方法添加水印,也能够通过 imagecopy()

imagecopymerge 함수의 구문 형식은 다음과 같습니다.

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

투명도 값은 0부터 100까지의 정수입니다. 투명도 값이 클수록 워터마크가 더 불투명해집니다.

다음으로 예시를 통해 이미지에 워터마크를 추가하는 방법을 살펴보겠습니다.


먼저 test.png라는 이름의 이미지와 logo.png라는 워터마크 이미지를 준비하여 루트 디렉터리에 배치했습니다


Pay 위 사항 참고하세요 아래 워터마크는 제가 추가한 것이 아니고, 사이트에서 자동으로 추가한 예시 사진입니다. .php.cn/upload/image /420/672/126/1634709760233139.png" title="1634709760233139.png" alt="PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다."/>PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.

이후 작업은 다음과 같습니다.

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

출력 결과: PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.

PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.가능한 대로 위 결과에서 볼 수 있듯이 imagecopymerge 함수를 사용하여 불투명도 50의 워터마크를 추가했습니다.

🎜지식 확장<strong><span style="font-size: 18px;">이미지 복사</span></strong> span>span>함수🎜🎜 imagecopymerge 함수이지만 imagecopy() 함수를 통해 함수의 일부를 복사할 수도 있습니다. 구문 형식은 다음과 같습니다. 🎜
<?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);
?>
🎜(x, y) 원본 이미지의 높이가 h이고 대상 이미지의 (x, y)인 직사각형 영역입니다. 🎜🎜🎜PHP에서 Imagesx() 및 Imagesy() 함수를 사용하여 이미지의 너비와 높이를 각각 얻습니다. 구문 형식은 다음과 같습니다. 🎜rrreee🎜예제는 다음과 같습니다. 🎜🎜rrreee🎜출력 결과: 🎜🎜🎜🎜🎜🎜효과는 다음과 같습니다. 🎜🎜🎜🎜🎜추천 학습: "🎜PHP Video Tutorial🎜" 🎜

위 내용은 PHP에서 이미지 워터마크를 추가하는 방법을 이해해야 합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.