/*
- * Function: PHP image watermark (watermark supports picture or text)
- Parameters
- * $groundImage background image, that is, need to add a watermark image, temporarily only support gif,jpg,png format;
- * $waterPos watermark position, there are 10 kinds of states, 0 is a random position;
- * For the top of the left, 2 for the top center, 3 for the top right;
- In the middle of the left, 5 for the Middle center, 6 for the middle right;
- *7 for the bottom of the left, 8 for the bottom center, 9 for the bottom of the right;
- * $waterImage image watermark, that is, as a watermark image, temporarily only support gif,jpg,png format;
- * $waterText text watermark, that is, the text as a watermark, support ASCII code, does not support Chinese;
- * $textFont Text size, value 1, 2, 3, 4 or 5, default is 5;
- * $textColor text color, value is hexadecimal color value, default is #ff0000 (red);
- * http://bbs.it-home.org
- * Note: Support GD 2.0,support FreeType, gif Read, GIF Create, JPG, PNG
- * $waterImage and $waterText best not to use at the same time, choose one of them, priority to use the $waterImage.
- * When the $waterimage is valid, the parameters $waterstring, $stringFont, $stringColor are not effective.
- * The watermark image has the same file name as the $groundImage.
- * Author: longware @ 2004-11-3 14:15:13
- */
- function Imagewatermark ($groundImage, $waterPos =0, $waterImage = "", $waterText = "", $textFont =5, $textColor = "#FF0000")
- {
- $isWaterImage = FALSE;
- $FORMATMSG = "Does not support this file format, please use the picture processing software to convert the picture to GIF, JPG, PNG format. ";
- Read Watermark File
- if (!empty ($waterImage) && file_exists ($waterImage))
- {
- $isWaterImage = TRUE;
- $water _info = getimagesize ($waterImage);
- $water _w= $water _info[0];//To obtain the width of the watermark image
- $water _h= $water _info[1];//to obtain a high watermark image
- Switch ($water _info[2])//Get the format of the watermark picture
- {
- Case 1: $water _im = Imagecreatefromgif ($waterImage);
- Case 2: $water _im = Imagecreatefromjpeg ($waterImage);
- Case 3: $water _im = Imagecreatefrompng ($waterImage);
- Default:die ($FORMATMSG);
- }
- }
- Read background picture
- if (!empty ($groundImage) && file_exists ($groundImage))
- {
- $ground _info = getimagesize ($groundImage);
- $ground _w= $ground _info[0];//Get the width of the background image
- $ground _h= $ground _info[1];//get a high background picture
- Switch ($ground _info[2])//Get the format of the background picture
- {
- Case 1: $ground _im = Imagecreatefromgif ($groundImage);
- Case 2: $ground _im = Imagecreatefromjpeg ($groundImage);
- Case 3: $ground _im = Imagecreatefrompng ($groundImage);
- Default:die ($FORMATMSG);
- }
- }
- Else
- {
- Die ("The picture that needs watermark does not exist!") ");
- }
- Watermark Location
- if ($isWaterImage)//Picture watermark
- {
- $w = $water _w;
- $h = $water _h;
- $label = "Picture";
- }
- else//text watermark
- {
- $temp = Imagettfbbox (ceil ($textFont *2.5), 0, "./cour.ttf", $waterText);//Gets the range of text that uses TrueType fonts
- $w = $temp [2]-$temp [6];
- $h = $temp [3]-$temp [7];
- Unset ($temp);
- $label = "Text Area";
- }
- if ($ground _w< $w) | | ($ground _h< $h))
- {
- echo "The length or width of the picture that needs to be watermarked is more than a watermark". $label. " Still small, unable to generate watermark! ";
- Return
- }
- Switch ($waterPos)
- {
- Case 0://Random
- $posX = rand (0, ($ground _w-$w));
- $posY = rand (0, ($ground _h-$h));
- Break
- Case 1://1 for top left
- $posX = 0;
- $posY = 0;
- Break
- Case 2://2 centered on the top
- $posX = ($ground _w-$w)/2;
- $posY = 0;
- Break
- Case 3://3 for top right
- $posX = $ground _w-$w;
- $posY = 0;
- Break
- Case 4://4 for the middle left
- $posX = 0;
- $posY = ($ground _h-$h)/2;
- Break
- Case 5://5 centered in the middle
- $posX = ($ground _w-$w)/2;
- $posY = ($ground _h-$h)/2;
- Break
- Case 6://6 for the middle right
- $posX = $ground _w-$w;
- $posY = ($ground _h-$h)/2;
- Break
- Case 7://7 for Bottom left
- $posX = 0;
- $posY = $ground _h-$h;
- Break
- Case 8://8 centered at bottom
- $posX = ($ground _w-$w)/2;
- $posY = $ground _h-$h;
- Break
- Case 9://9 for bottom right
- $posX = $ground _w-$w;
- $posY = $ground _h-$h;
- Break
- default://Random
- $posX = rand (0, ($ground _w-$w));
- $posY = rand (0, ($ground _h-$h));
- Break
- }
- To set the color blending mode of an image
- Imagealphablending ($ground _im, true);
- if ($isWaterImage)//Picture watermark
- {
- Imagecopy ($ground _im, $water _im, $posX, $posY, 0, 0, $water _w, $water _h);//copy watermark to target file
- }
- else//text watermark
- {
- if (!empty ($textColor) && (strlen ($textColor) ==7))
- {
- $R = Hexdec (substr ($textColor,));
- $G = Hexdec (substr ($textColor, 3,2));
- $B = Hexdec (substr ($textColor, 5));
- }
- Else
- {
- Die ("Watermark text color format is not correct! ");
- }
- Imagestring ($ground _im, $textFont, $posX, $posY, $waterText, Imagecolorallocate ($ground _im, $R, $G, $B));
- }
- Create a picture after a watermark
- @unlink ($groundImage);
- Switch ($ground _info[2])//Get the format of the background picture
- {
- Case 1:imagegif ($ground _im, $groundImage);
- Case 2:imagejpeg ($ground _im, $groundImage);
- Case 3:imagepng ($ground _im, $groundImage);
- Default:die ($ERRORMSG);
- }
- Freeing memory
- if (Isset ($water _info)) unset ($water _info);
- if (Isset ($water _im)) Imagedestroy ($water _im);
- unset ($ground _info);
- Imagedestroy ($ground _im);
- }
//------
- if (Isset ($_files) &&!empty ($_files[' userfile ']) && $_files[' userfile ' [' Size ']>0]
- {
- $uploadfile = "./". Time (). " _ ". $_files[' userfile ' [' name '];
- if (copy ($_files[' userfile ' [' tmp_name '], $uploadfile))
- {
- echo "OK
";
- Text watermark
- Imagewatermark ($uploadfile, 0, "", "Your Water text", 9, "#EBEBEB");
- Image watermark
- $waterImage = "./images/watermark.gif";//Watermark Picture Path
- Imagewatermark ($uploadfile, 9, $waterImage);
- echo "";
- }
- Else
- {
- echo "Fail
";
- }
- }
- ?>
Copy Code |