Heim >Backend-Entwicklung >PHP-Problem >So fügen Sie PHP-Bildern Wasserzeichen hinzu

So fügen Sie PHP-Bildern Wasserzeichen hinzu

藏色散人
藏色散人Original
2021-05-14 09:43:355385Durchsuche

So fügen Sie PHP-Bildern Wasserzeichen hinzu: 1. Setzen Sie Textwasserzeichen über „waterText('banner.jpg', 9, '','xx.com');“ 2. Über „imageWaterMark('404.jpg') , 9, 'logo.gif');"Bildwasserzeichen setzen.

So fügen Sie PHP-Bildern Wasserzeichen hinzu

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP Version 7.1, Dell G3-Computer.

Ein Beispiel für das Hinzufügen von Bildwasserzeichen und Textwasserzeichen zu Bildern mit PHP

Lassen Sie mich ein Beispiel für das Hinzufügen von Bildwasserzeichen und Textwasserzeichen zu Bildern mit PHP teilen. Dies ist eine Funktion, die häufig auf Websites verwendet wird um den Code hinzuzufügen und aufzurufen.

Kerncode:

function imageWaterMark($groundImage, $waterPos = 0, $waterImage = "", $waterText = "", $textFont = 5, $textColor = "#FF0000") {

    $isWaterImage = FALSE;

    $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";

    //读取水印文件

    if (!empty($waterImage) && file_exists($waterImage)) {

        $isWaterImage = TRUE;

        $water_info = getimagesize($waterImage);

        $water_w = $water_info[0]; //取得水印图片的宽

        $water_h = $water_info[1]; //取得水印图片的高

        switch ($water_info[2]) {//取得水印图片的格式
            case 1:$water_im = imagecreatefromgif($waterImage);
                break;

            case 2:$water_im = imagecreatefromjpeg($waterImage);
                break;

            case 3:$water_im = imagecreatefrompng($waterImage);
                break;

            default:die($formatMsg);
        }
    }

    //读取背景图片

    if (!empty($groundImage) && file_exists($groundImage)) {

        $ground_info = getimagesize($groundImage);

        $ground_w = $ground_info[0]; //取得背景图片的宽

        $ground_h = $ground_info[1]; //取得背景图片的高

        switch ($ground_info[2]) {//取得背景图片的格式
            case 1:$ground_im = imagecreatefromgif($groundImage);
                break;

            case 2:$ground_im = imagecreatefromjpeg($groundImage);
                break;

            case 3:$ground_im = imagecreatefrompng($groundImage);
                break;

            default:die($formatMsg);
        }
    } else {

        die("需要加水印的图片不存在!");
    }

    //水印位置

    if ($isWaterImage) {//图片水印
        $w = $water_w;

        $h = $water_h;

        $label = "图片的";
    } else {//文字水印
        $temp = imagettfbbox(ceil($textFont * 5), 0, "./cour.ttf", $waterText); //取得使用 TrueType 字体的文本的范围

        $w = $temp[2] - $temp[6];

        $h = $temp[3] - $temp[7];

        unset($temp);

        $label = "文字区域";
    }

    if (($ground_w < $w) || ($ground_h < $h)) {

        echo "需要加水印的图片的长度或宽度比水印" . $label . "还小,无法生成水印!";

        return;
    }

    switch ($waterPos) {

        case 0://随机

            $posX = rand(0, ($ground_w - $w));

            $posY = rand(0, ($ground_h - $h));

            break;

        case 1://1为顶端居左

            $posX = 0;

            $posY = 0;

            break;

        case 2://2为顶端居中

            $posX = ($ground_w - $w) / 2;

            $posY = 0;

            break;

        case 3://3为顶端居右

            $posX = $ground_w - $w;

            $posY = 0;

            break;

        case 4://4为中部居左

            $posX = 0;

            $posY = ($ground_h - $h) / 2;

            break;

        case 5://5为中部居中

            $posX = ($ground_w - $w) / 2;

            $posY = ($ground_h - $h) / 2;

            break;

        case 6://6为中部居右

            $posX = $ground_w - $w;

            $posY = ($ground_h - $h) / 2;

            break;

        case 7://7为底端居左

            $posX = 0;

            $posY = $ground_h - $h;

            break;

        case 8://8为底端居中

            $posX = ($ground_w - $w) / 2;

            $posY = $ground_h - $h;

            break;

        case 9://9为底端居右

            $posX = $ground_w - $w - 10;   // -10 是距离右侧10px 可以自己调节

            $posY = $ground_h - $h - 10;   // -10 是距离底部10px 可以自己调节

            break;

        default://随机

            $posX = rand(0, ($ground_w - $w));

            $posY = rand(0, ($ground_h - $h));

            break;
    }

    //设定图像的混色模式

    imagealphablending($ground_im, true);

    if ($isWaterImage) {//图片水印
        imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h); //拷贝水印到目标文件
    } else {//文字水印
        if (!emptyempty($textColor) && (strlen($textColor) == 7)) {

            $R = hexdec(substr($textColor, 1, 2));

            $G = hexdec(substr($textColor, 3, 2));

            $B = hexdec(substr($textColor, 5));
        } else {

            die("水印文字颜色格式不正确!");
        }

        imagestring($ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
    }

    //生成水印后的图片

    @unlink($groundImage);

    switch ($ground_info[2]) {//取得背景图片的格式
        case 1:imagegif($ground_im, $groundImage);
            break;

        case 2:imagejpeg($ground_im, $groundImage);
            break;

        case 3:imagepng($ground_im, $groundImage);
            break;

        default:die($errorMsg);
    }

    //释放内存

    if (isset($water_info))
        unset($water_info);

    if (isset($water_im))
        imagedestroy($water_im);

    unset($ground_info);

    imagedestroy($ground_im);
}

Textwasserzeichen:

waterText('banner.jpg', 9, '','sucaihuo.com'); //背景图片,$waterPos水印位置,水印图片地址

Bildwasserzeichen:

imageWaterMark('404.jpg', 9, 'logo.gif'); //背景图片,$waterPos水印位置,水印图片地址

Hinweis: Es ist am besten, $waterImage und $waterText nicht gleichzeitig zu verwenden, sondern zuerst $waterImage.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo fügen Sie PHP-Bildern Wasserzeichen hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn