Baidu Ueditor upload image plus watermark example

Source: Internet
Author: User
Tags php class rand

Open the Upload class file in the PHP directory under Ueditor compression package: Uploader.class.php
Add the call watermark processing method under the main method of uploading files:

The code is as follows Copy Code
/**
* The main processing method of uploading files
* @return Mixed
*/
Private Function Upfile ()
{
........................
........................
$this->stateinfo = $this->statemap[0]; (about 122 lines)
Add below the treatment method such as downward water printing:
$this->imagewatermark ($this->filepath,9, '. /img/watermark.png '); Note See below in this article Imagewatermark () function method
........................
}

Watermark Processing method/function:

The code is as follows Copy Code

/**
* Function: PHP image watermark (watermark support picture or text)
Parameters
* $groundImage background picture, that is, the need to add a watermark picture, temporarily support gif,jpg,png format;
* $waterPos Watermark location, there are 10 kinds of states, 0 is random position;
* 1 for the top left, 2 for the top center, 3 for the top right;
* 4 for the middle of the left, 5 for the Middle center, 6 for the middle of the right;
* 7 for the bottom of the left, 8 for the bottom center, 9 for the bottom right;
* $waterImage image watermark, that is, as a watermark picture, temporarily 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, values are 1, 2, 3, 4, or 5, and the default is 5;
* $textColor The text color, the value is hexadecimal color value, the default is #ff0000 (red);
*
* Note: Support GD 2.0,support FreeType, gif Read, GIF Create, JPG, PNG
* $waterImage and $waterText should not be used at the same time, choose one of them, priority to use $waterImage.
* When the $waterimage is valid, the parameters $waterstring, $stringFont, $stringColor are not effective.
* The name of the picture after the watermark is the same as the $groundImage.
*/
Private Function Imagewatermark ($groundImage, $waterPos =0, $waterImage = "", $waterText = "", $textFont =5, $textColor = "# FF0000 ")
{
$isWaterImage = FALSE;
$FORMATMSG = "This file format is not supported, please use 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];//Gets the width of the watermark picture
$water _h = $water _info[1];//Gets the high watermark picture
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);
}
}

Reading background pictures

if (!empty ($groundImage) && file_exists ($groundImage))
{
$ground _info = getimagesize ($groundImage);
$ground _w = $ground _info[0];//Gets the width of the background picture
$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 ("Need to watermark the picture does not exist!") ");
}

Watermark Location
if ($isWaterImage)//Picture watermark
{
$w = $water _w;
$h = $water _h;
$label = "Picture";
}
else//text watermark
{
$temp = Imagettfbbox (ceil ($textFont *5), 0, "./cour.ttf", $waterText);//Get a 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 you want to watermark is more than the 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 for top center
$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 Central left
$posX = 0;
$posY = ($ground _h-$h)/2;
Break
Case 5://5 centered in middle
$posX = ($ground _w-$w)/2;
$posY = ($ground _h-$h)/2;
Break
Case 6://6 for Middle right
$posX = $ground _w-$w;
$posY = ($ground _h-$h)/2;
Break
Case 7://7 to 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 to bottom right
$posX = $ground _w-$w-10; -10 is the right side of the 10px can adjust their own
$posY = $ground _h-$h-10; -10 is the distance from the bottom 10px can adjust itself
Break
default://Random
$posX = rand (0, ($ground _w-$w));
$posY = rand (0, ($ground _h-$h));
Break
}

Set the blending mode of the 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 destination file
}
else//text watermark
{
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 ("Watermark text color format is not correct!") ");
}
Imagestring ($ground _im, $textFont, $posX, $posY, $waterText, Imagecolorallocate ($ground _im, $R, $G, $B));
}

Picture after Watermark is generated
@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);
}

Free memory
if (Isset ($water _info)) unset ($water _info);
if (Isset ($water _im)) Imagedestroy ($water _im);
unset ($ground _info);
Imagedestroy ($ground _im);
}

Based on the above method, you can also add the relevant options in the multiple upload to allow the user to customize the location where the watermark is added.

A Simple example:

(1) using the Serverparam parameter of the Ueditor editor, parameter action: custom request parameters
View to add a checkbox that allows the user to choose whether to add a watermark, code:
<input type= "checkbox" Name= "Wmid" id= "wmid_fmdata[content" "checked=" Checked "onclick_fckprotectedatt=" onclick= "CANCELWM (this);" "/><label for= wmid_fmdata[content]" > Watermark </label> <span style= "color:red;" > (Hint: You can choose whether to use watermark before each upload) </span></span> view Add the following code append the WM parameter to the background issue request:

The code is as follows Copy Code

Ue.ready (function () {//page initialization is done by default watermark state
Ue.geteditor (' editor '). ExecCommand (' Serverparam ', ' wm ', 1);
});
function Cancelwm (t) {
if (t.checked) {
Ue.geteditor (' editor '). ExecCommand (' Serverparam ', ' wm ', 1);
}else{
Ue.geteditor (' editor '). ExecCommand (' Serverparam ', ' wm ', 0);
}
}

(2) action_upload.php attachment upload Control code file to get WM parameters and initialize the upload class:

The code is as follows Copy Code
/*
* To determine whether to add watermarks
*/
$WM = $_get[' wm '];
$up = new Uploader ($fieldName, $config, $base, $WM);

(3) The Uploader.class.php class file handles whether the watermark is added, and the procedure Code is abbreviated.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.