Home >Backend Development >PHP Tutorial >PHP example function to add watermark to pictures_PHP tutorial

PHP example function to add watermark to pictures_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:46:23961browse

To add watermarks to images in PHP, we need to use many functions, such as imagecreatefromjpeg, imagecreatefrompng, getimagesize and other functions. These are all functions belonging to the PHP GD library, so we must open the GD library in php.ini Only then can PHP use these functions to generate image watermarks.

To implement the watermark function, we mainly rely on these functions

1.imagecreatefromjpeg // Open JPG image 2.imagecreatefromgif // Open GIF image
3.imagecreatefrompng // Open PNG image
4.imagecreatefromwbmp // Open WBMP image (less commonly used)
5.getimagesize // Get image size information
6.imagecopymerge // Integrate multiple images (the main function of adding watermarks)
7.imagejpeg // Save JPG image
8.imagegif // Save GIF image
9.imagepng // Save PNG image

 代码如下 复制代码


echo img_water_mark("1.jpg","walter.gif",null,"2.jpg",5,80);

/**
* 图片加水印(适用于png/jpg/gif格式)
*
* @author flynetcn
*
* @param $srcImg 原图片
* @param $waterImg 水印图片
* @param $savepath 保存路径
* @param $savename 保存名字
* @param $positon 水印位置
* 1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
* @param $alpha 透明度 -- 0:完全透明, 100:完全不透明
*
* @return 成功 -- 加水印后的新图片地址
* 失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
* -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
*/
function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30)
{
$temp = pathinfo($srcImg);
$name = $temp[basename];
$path = $temp[dirname];
$exte = $temp[extension];
$savename = $savename ? $savename : $name;
$savepath = $savepath ? $savepath : $path;
$savefile = $savepath ."/". $savename;
$srcinfo = @getimagesize($srcImg);
if (!$srcinfo) {
return -1; //原文件不存在
}
$waterinfo = @getimagesize($waterImg);
if (!$waterinfo) {
return -2; //水印图片不存在
}
$srcImgObj = image_create_from_ext($srcImg);
if (!$srcImgObj) {
return -3; //原文件图像对象建立失败
}
$waterImgObj = image_create_from_ext($waterImg);
if (!$waterImgObj) {
return -4; //水印文件图像对象建立失败
}
switch ($positon) {
//1顶部居左
case 1: $x=$y=0; break;
//2顶部居右
case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
//3居中
case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
//4底部居左
case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
//5底部居右
case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
default: $x=$y=0;
}
imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
switch ($srcinfo[2]) {
case 1: imagegif($srcImgObj, $savefile); break;
case 2: imagejpeg($srcImgObj, $savefile); break;
case 3: imagepng($srcImgObj, $savefile); break;
default: return -5; //保存失败
}
imagedestroy($srcImgObj);
imagedestroy($waterImgObj);
return $savefile;
}

function image_create_from_ext($imgfile)
{
$info = getimagesize($imgfile);
$im = null;
switch ($info[2]) {
case 1: $im=imagecreatefromgif($imgfile); break;
case 2: $im=imagecreatefromjpeg($imgfile); break;
case 3: $im=imagecreatefrompng($imgfile); break;
}
return $im;
}

Currently supports jpg, gif, png and other image formats.

Usage example:

The code is as follows Copy code
代码如下 复制代码

if($pic = watermark('./image.jpg','./watermark.png'))
{
echo '' ;
}
else
{
    echo '';
}

if($pic = watermark('./image.jpg','./watermark.png'))
{
echo '' ;
}
else
{
echo '';
}

The following demonstrates a complete full watermark adding function

The code is as follows Copy code

/***************************************************** **********

Parameter description:
$max_file_size : upload file size limit, unit BYTE
$destination_folder: Upload file path
$watermark : Whether to add a watermark (1 means adding watermark, others means not adding watermark);

Instructions for use:
1. Remove the ; number in front of the "extension=php_gd2.dll" line in the PHP.INI file, because we need to use the GD library;
2. Change extension_dir = to the directory where your php_gd2.dll is located;
*************************************************** ************/

//Upload file type list
$uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);

$max_file_size=2000000; //Upload file size limit, unit BYTE
$destination_folder="uploadimg/"; //Upload file path
$watermark=1; //Whether to add a watermark (1 means adding watermark, others means not adding watermark);
$watertype=1; //Watermark type (1 is text, 2 is picture)
$waterposition=1; //Watermark position (1 is the lower left corner, 2 is the lower right corner, 3 is the upper left corner, 4 is the upper right corner, 5 is the center);
$waterstring="http://www.bKjia.c0m/"; //Watermark string
$waterimg="xplore.gif"; //Watermark image
$imgpreview=1; //Whether to generate a preview image (1 is generated, others are not generated);
$imgpreviewsize=1/1; //Thumbnail ratio
?>


Picture watermarking program demonstration!WWW.MOP8.COM




Upload file:


The file types allowed to be uploaded are:


This demonstration space is provided by TuWoo, and this program uses text watermarking.

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
If (!is_uploaded_file($_FILES["upfile"][tmp_name]))
//Does the file exist?

echo "The picture does not exist!";
exit;
}  

$file = $_FILES["upfile"];
If($max_file_size < $file["size"])
//Check file size

echo "The file is too large!";
exit;
}  

if(!in_array($file["type"], $uptypes))
//Check file type

echo "File type does not match!".$file["type"];
exit;
}  

if(!file_exists($destination_folder))

          mkdir($destination_folder);                                           }  

$filename=$file["tmp_name"];

$image_size = getimagesize($filename);
$pinfo=pathinfo($file["name"]);
$ftype=$pinfo['extension'];
$destination = $destination_folder.time().".".$ftype;
if (file_exists($destination) && $overwrite != true)

echo "The file with the same name already exists";
exit;
}  

if(!move_uploaded_file ($filename, $destination))


echo "Error moving file";
exit;
}  

$pinfo=pathinfo($destination);

$fname=$pinfo[basename];
echo " has been uploaded successfully
File name: ".$destination_folder.$fname."
" ;
echo " width:".$image_size[0];
echo " length: ".$image_size[1];
echo "
Size:".$file["size"]." bytes";

if($watermark==1)


        $iinfo=getimagesize($destination,$iinfo);                                             $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);                                                          $white=imagecolorallocate($nimage,255,255,255);                                                     $black=imagecolorallocate($nimage,0,0,0);
        $red=imagecolorallocate($nimage,255,0,0);                                                Imagefill($nimage,0,0,$white);
Switch ($iinfo[2])
                                                                                        case 1:
              $simage =imagecreatefromgif($destination);                                      Break;
case 2:
$simage =imagecreatefromjpeg($destination);
Break;
case 3:
$simage =imagecreatefrompng($destination);
Break;
case 6:
$simage =imagecreatefromwbmp($destination);
Break;
                   default:                                                                 die("Unsupported file type");                              exit;
                                             
imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
Imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);

       switch($watertype)  
       {  
           case 1:   //加水印字符串  
           imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);  
           break;  
           case 2:   //加水印图片  
           $simage1 =imagecreatefromgif("xplore.gif");  
           imagecopy($nimage,$simage1,0,0,0,0,85,15);  
           imagedestroy($simage1);  
           break;  
       }  

       switch ($iinfo[2])  
       {  
           case 1:  
           //imagegif($nimage, $destination);  
           imagejpeg($nimage, $destination);  
           break;  
           case 2:  
           imagejpeg($nimage, $destination);  
           break;  
           case 3:  
           imagepng($nimage, $destination);  
           break;  
           case 6:  
           imagewbmp($nimage, $destination);  
           //imagejpeg($nimage, $destination);  
           break;  
       }  

       //覆盖原上传文件  
       imagedestroy($nimage);  
       imagedestroy($simage);  
   }  

   if($imgpreview==1)  
   {  
   echo "
图片预览:
";  
   echo "图片预览:r文件名:";  
   }  
}  
?>  
  

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632951.htmlTechArticle在php中要实现图片增加水印我们要用到的函数有很多,imagecreatefromjpeg,imagecreatefrompng,getimagesize等等函数,这些都是属于php GD库的函数,所以...
Statement:
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