search
  • Sign In
  • Sign Up
Password reset successful

Follow the proiects vou are interested in andi aet the latestnews about them taster

Table of Contents
php can add a watermark effect to a picture,
Articles you may be interested in:
Home Backend Development PHP Tutorial PHP implements adding watermark effect to an image, _PHP tutorial

PHP implements adding watermark effect to an image, _PHP tutorial

Jul 12, 2016 am 09:01 AM
php add watermark picture

php can add a watermark effect to a picture,

php can add a watermark effect to a picture

<?php
/**
 * 功能:给一张图片加上水印效果
 *      $i 要加水印效果的图片
 *      $t 水印文字
 *      $size 文字大小
 *      $pos 水印的位置
 *      $color 文字的颜色
 *      $flag 是布尔值,主要用来区分是不是原图上加水印
 *      $type 如果$flag等于false 则新图上加上水印 新文件名为 原名_txt.jpg
 */
function txt($i,$t='版权所有',$size=25,$pos=5,$color='rand',$flag=true,$type='_txt'){
  $img = imagecreatefromjpeg($i);
  $w = imagesx($img);
  $h = imagesy($img);
  $font = dirname(__FILE__).'/font/ls.ttf';
  $ps = imagettfbbox($size,0,$font,$t);
  $tw = $ps[4];
  $th = abs($ps[5]);
  switch($pos){
    case 1:break;  
    case 2:break;  
    case 3:break;  
    case 4:break;  
    case 5:$x=($w-$tw)/2;$y=($h-$th)/2+$th;break;  
    case 6:break;  
    case 7:break;  
    case 8:break;  
    case 9:break;  
    default:break;
  }
  $c = getcolor($img,$color);
  imagettftext($img,$size,0,$x,$y,$c,$font,$t);
  if($flag){
    imagejpeg($img,$i); 
  }else{
    $ext = ext($i);
    $ppp = rtrim($i,'.'.$ext);
    $ppp = $ppp.$type.'.'.$ext;
    imagejpeg($img,$ppp);
  }
}
 
function getcolor($i,$c='rand',$a=50){
  $cc = '';
  switch($c){
    case 'white':$cc=imagecolorallocatealpha($i,255,255,255,$a);break;
    case 'black':$cc=imagecolorallocatealpha($i,0,0,0,$a);break;
    case 'red':$cc=imagecolorallocatealpha($i,255,0,0,$a);break;
    case 'green':$cc=imagecolorallocatealpha($i,0,255,0,$a);break;
    case 'blue':$cc=imagecolorallocatealpha($i,0,0,255,$a);break;
    case 'orange':$cc=imagecolorallocatealpha($i,0xff,0x66,0x33,$a);break;
    case 'yellow':$cc=imagecolorallocatealpha($i,255,255,0,$a);break;
    case 'rand':$cc=imagecolorallocatealpha($i,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255),$a);break;
    default:
      $cs = substr($c,1);
      $ok = str_split($cs,2);
      $cc = imagecolorallocatealpha($i,hexdec($ok[0]),hexdec($ok[1]),hexdec($ok[2]),$a);
    break;   
  }
  return $cc;
}
 
 
/**
 * 功能是:返回扩展名
 */
 
function ext($f){
  $exts = explode('.',$f);
  return end($exts);
}
 
/**
 * 功能是:返回文件名,不含扩展名
 */
function name($f){
  $s = explode('/',$f);
  $fn = end($s);
  return rtrim($fn,'.'.ext($f));
}

Let’s look at another one that supports adding watermarks to pictures in two ways: pictures and text. Pictures support three formats: GIF, PNG, and JPG. Watermark pictures support PNG and GIF

function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{

  $srcInfo = @getimagesize($imgSrc);
  $srcImg_w  = $srcInfo[0];
  $srcImg_h  = $srcInfo[1];
    
  switch ($srcInfo[2]) 
  { 
    case 1: 
      $srcim =imagecreatefromgif($imgSrc); 
      break; 
    case 2: 
      $srcim =imagecreatefromjpeg($imgSrc); 
      break; 
    case 3: 
      $srcim =imagecreatefrompng($imgSrc); 
      break; 
    default: 
      die("不支持的图片文件类型"); 
      exit; 
  }
    
  if(!strcmp($markType,"img"))
  {
    if(!file_exists($markImg) || empty($markImg))
    {
      return;
    }
      
    $markImgInfo = @getimagesize($markImg);
    $markImg_w  = $markImgInfo[0];
    $markImg_h  = $markImgInfo[1];
      
    if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)
    {
      return;
    }
      
    switch ($markImgInfo[2]) 
    { 
      case 1: 
        $markim =imagecreatefromgif($markImg); 
        break; 
      case 2: 
        $markim =imagecreatefromjpeg($markImg); 
        break; 
      case 3: 
        $markim =imagecreatefrompng($markImg); 
        break; 
      default: 
        die("不支持的水印图片文件类型"); 
        exit; 
    }
      
    $logow = $markImg_w;
    $logoh = $markImg_h;
  }
    
  if(!strcmp($markType,"text"))
  {
    $fontSize = 16;
    if(!empty($markText))
    {
      if(!file_exists($fontType))
      {
        return;
      }
    }
    else {
      return;
    }
      
    $box = @imagettfbbox($fontSize, 0, $fontType,$markText);
    $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
    $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
  }
    
  if($markPos == 0)
  {
    $markPos = rand(1, 9);
  }
    
  switch($markPos)
  {
    case 1:
      $x = +5;
      $y = +5;
      break;
    case 2:
      $x = ($srcImg_w - $logow) / 2;
      $y = +5;
      break;
    case 3:
      $x = $srcImg_w - $logow - 5;
      $y = +15;
      break;
    case 4:
      $x = +5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 5:
      $x = ($srcImg_w - $logow) / 2;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 6:
      $x = $srcImg_w - $logow - 5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 7:
      $x = +5;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 8:
      $x = ($srcImg_w - $logow) / 2;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 9:
      $x = $srcImg_w - $logow - 5;
      $y = $srcImg_h - $logoh -5;
      break;
    default: 
      die("此位置不支持"); 
      exit;
  }
    
  $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
    
  imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
    
  if(!strcmp($markType,"img"))
  {
    imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
    imagedestroy($markim);
  }
    
  if(!strcmp($markType,"text"))
  {
    $rgb = explode(',', $TextColor);
      
    $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
    imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
  }
    
  switch ($srcInfo[2]) 
  { 
    case 1:
      imagegif($dst_img, $imgSrc); 
      break; 
    case 2: 
      imagejpeg($dst_img, $imgSrc); 
      break; 
    case 3: 
      imagepng($dst_img, $imgSrc); 
      break;
    default: 
      die("不支持的水印图片文件类型"); 
      exit; 
  }
    
  imagedestroy($dst_img);
  imagedestroy($srcim);
}

Parameter description:

$imgSrc: target image, can have relative directory address,
$markImg: watermark image, which can have a relative directory address and supports both PNG and GIF formats. For example, if the watermark image is in the mark directory of the executable file, it can be written as: mark/mark.gif
$markText: watermark text added to the image
$TextColor: font color of watermark text
$markPos: The position where the image watermark is added, value range: 0~9
0: Random position, randomly select a position between 1~8
1: Top left 2: Top center 3: Top right 4: Left center
5: Center of the picture 6: Center on the right 7: Center on the bottom 8: Center on the bottom 9: Center on the bottom
$fontType: specific font library, can have relative directory address
$markType: The way to add watermarks to pictures, img means to add watermarks as pictures, text means to add watermarks as text

Code comments:

Line 4~6: Get the width and height of the target image
Lines 8~22: Call different functions according to the image type to obtain the operation image identifier

GetImageSize function knowledge point: GetImageSize can be used without installing GD, and its return value array has four elements. Index value 0 is the image height. Index value 1 is the width of the image. Index value 2 is the file format of the image, with value 1 being GIF format, 2 being JPEG/JPG format, and 3 being PNG format. Index value 3 is the height and width string of the image, height=xxx width=yyy. The width and height units of the returned image are pixels

Lines 24~58: When selecting the image method to add a watermark to the target image, obtain the width and height of the watermark image, which is usually the logo of the website. If the target image is smaller in width or height than the watermark image or the watermark image does not exist, jump out of this function.

Return statement knowledge point: direct return means returning nothing and ending the function directly. It can also be understood as returning NULL.

Lines 60~77: When selecting the text method to add a watermark to the target image, first set the size of the watermark text. By default, I set it to 16px. You can adjust the font size as needed. If the font file does not exist, jump out of the function, and finally obtain the virtual length and width of the text in this format through the imagettfbbox function.

Imagettfbbox function knowledge point: This function returns an array containing 8 cells to represent the four corners of the text frame. The meaning of the index value: 0 represents the X position of the lower left corner, 1 represents the Y position of the sitting corner, and 2 represents the X position of the lower right corner. Position, 3 represents the Y position of the lower right corner, 4 represents the X position of the upper right corner, 5 represents the Y position of the upper right corner, 6 represents the X position of the upper left corner, and 7 represents the Y position of the upper left corner. This function requires the support of both GD library and FreeType library
The max function returns the largest value among the parameters.

Line 79~125: Calculate the specific coordinate value based on the set image watermark position. You can refine the watermark position according to the effect.

Lines 127~129: Create a new image with the same size as the target image.

Note: Since the scope of the imagecreatetruecolor function is a black image, if your target image is transparent, the new image generated will not be transparent.

Lines 131~162: Based on the image or text, the image with the watermark is finally generated.

Calling instructions:

You can call it by function call. Of course, you can also encapsulate it in a class, or you can further subdivide this function into modules as needed. Of course, there is no problem if you use it this way now. I have tested it, so please feel free to use it.

Other instructions:

Since the imagettftext and imagettfbbox functions require the support of the GD library and the FreeType library, if your operating environment does not support the GD library and the FreeType library, the text mode cannot be implemented. You can use the imagestring function to add text watermarks to images, and set Just set the $logow and $logoh values ​​in text mode.

The imagejpeg function can also set the quality of the synthesized image.

Articles you may be interested in:

  • PHP class used to add watermarks to images
  • Super easy to use php upload image class (random name, thumbnail, Add watermark)
  • PHP image watermarking principle (super simple example code)
  • php text watermark and php image watermark implementation code (two watermarking methods)
  • PHP The watermark function can be added by uploading pictures for proportional scaling
  • PHP implements the function of adding watermarks to pictures
  • PHP encapsulation class for adding watermarks to pictures for compression and cutting

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1087268.htmlTechArticlephp implements adding a watermark effect to a picture, php implements adding a watermark effect to a picture php/* * * Function: Add watermark effect to a picture* $i Picture to be added with watermark effect* $t Water...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

ArtGPT

ArtGPT

AI image generator for creative art from text prompts.

Stock Market GPT

Stock Market GPT

AI powered investment research for smarter decisions

Popular tool

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to install Redis cluster on Linux_Linux distributed cache deployment solution [Advanced] How to install Redis cluster on Linux_Linux distributed cache deployment solution [Advanced] Feb 08, 2026 pm 07:39 PM

The Redis6 cluster must be created with redis-cli--cluster. It requires a minimum of 3 masters and 3 slaves, a total of 6 nodes. The client port and the corresponding cluster bus port (10000) must be opened. Correct configuration but blocked ports is a common cause of failure.

How to dynamically set arbitrary depth value of nested array in PHP How to dynamically set arbitrary depth value of nested array in PHP Mar 04, 2026 am 11:15 AM

This article introduces a safe and efficient method to use key path arrays (such as ['key1', 'key2', 'key3']) to assign values ​​to the last nodes of multi-dimensional associative arrays, solve the problem of reference failure caused by value transfer, and take into account key existence verification.

How to import SQL files in mysql_mysql SQL file import method How to import SQL files in mysql_mysql SQL file import method Feb 09, 2026 pm 05:24 PM

The most common and reliable way to import SQL files into MySQL is the command line tool mysql, which supports cross-platform, high efficiency and stability, and is suitable for files of all sizes. It can also be executed in the client through the source command, or using graphical tools such as phpMyAdmin and MySQL Workbench.

PHP batch processing of color mode and resolution of pictures in PPT PHP batch processing of color mode and resolution of pictures in PPT Mar 02, 2026 am 10:18 AM

To read PPTX images with PHP, you need to decompress the ZIP package first, because the images are stored in the ppt/media/ directory; directly calling the image function will report an error; you must use ZipArchive to decompress, Imagick to process CMYK to RGB conversion and scaling, and update the rels and [Content_Types].xml files simultaneously.

Where can I see the PHP operator priority table_php official operator priority [Reference] Where can I see the PHP operator priority table_php official operator priority [Reference] Mar 02, 2026 am 11:45 AM

The official description of PHP operator precedence is located at https://www.php.net/manual/en/language.operators.precedence.php. You need to directly search for "operatorprecedence" or manually enter the URL to access; == and === have the same priority and belong to the same level; error-prone combinations include &&/|| and and/or, ?: and ??, new and []; complex expressions must be bracketed.

Number statistics in pyramid loop in PHP: correct counting method of total, odd and even numbers Number statistics in pyramid loop in PHP: correct counting method of total, odd and even numbers Mar 04, 2026 pm 01:30 PM

This article explains in detail how to accurately count the total number, odd number and even number of all generated numbers in the PHP pyramid printing loop, correct common logic errors (such as misuse of variables, confusion of counting objects), and provide runnable examples and key precautions.

How to deal with character sets after mysql upgrade_mysql encoding migration instructions How to deal with character sets after mysql upgrade_mysql encoding migration instructions Feb 09, 2026 pm 07:17 PM

After the MySQL 8.0 upgrade, the default character set becomes utf8mb4, but the old table character set remains unchanged; latin1/utf8 tables need to be manually migrated, and the source character set must be specified when exporting. ALTERTABLECONVERT will re-encode the data, and the connection layer must explicitly declare utf8mb4.

How to install ThinkPHP with composer_Steps to deploy TP framework using composer How to install ThinkPHP with composer_Steps to deploy TP framework using composer Feb 12, 2026 am 06:27 AM

The ThinkPHP stable version should be clearly specified, such as using composercreate-projecttopthink/thinktp6^6.3 to install the TP6.3LTS version to avoid pulling non-production-ready beta versions because dev-master has switched to the TP8 preview version.

Related articles