ホームページ >バックエンド開発 >PHPチュートリアル >PHP で画像の透かしを追加する方法を理解する必要があります

PHP で画像の透かしを追加する方法を理解する必要があります

WBOY
WBOYオリジナル
2021-10-20 14:59:436176ブラウズ

前回の記事では、「PHP で画像の拡大縮小とトリミングを完了するにはどうすればよいですか?」についてお届けしました。 (例の詳細な説明) 》, PHP でグラフィックスをズームおよびクロップする方法を例を通して紹介します. この記事では、PHP でのグラフィックス処理の知識と、画像にグラフィックスを追加する方法について引き続き見ていきます。みんなが助けてくれることを願っています!

PHP で画像の透かしを追加する方法を理解する必要があります

私たちの日常生活では、写真の盗難を防ぐために、写真に透かしが追加されているのをよく見かけます。たとえば、Web サイトでは、写真ファイルを入力します。右下隅に自動的にウォーターマークが追加されますが、このウォーターマーク効果はどのように実現されるのでしょうか?画像に透かしを追加する効果は、PHP を通じて実現できます。

前回の記事で、画像を切り取って対象画像の上に配置するという操作は、ウォーターマークを追加するのと似ていますが、ウォーターマークを追加するには、imagecopymerge 関数を使用する必要があります。

<strong>#imagecopymerge<span style="font-size: 18px;"></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 のウォーターマークが追加されます。

#知識を広げるimagecopy<strong><span style="font-size: 18px;"></span></strong>機能imagecopymerge 関数を使用してウォーターマークを追加する以外に、関数の一部をコピーできる

imagecopy()

関数を使用することもできます。その構文形式は次のとおりです。 : <pre class="brush:php;toolbar:false">imagecopy($目标图片, $来源图片,$目标图片x,$目标图片y,$来源图片x,$来源图片y,$来源图片宽,$来源图片高)</pre> その意味は、ソース画像の(x, y)からターゲット画像の(x, y)までの幅w、高さhの長方形領域を選択することです。


PHP の imagex() 関数と 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。