Home  >  Article  >  Backend Development  >  How to rename and add watermark to uploaded files in ckeditor_PHP tutorial

How to rename and add watermark to uploaded files in ckeditor_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 16:57:211037browse

This article will introduce to you the configuration of renaming and adding watermarks to upload files using ckeditor. Students who need to know more can refer to it.


First: I want the uploaded files to be organized into folders based on date

Please modify the config.php file in the editoreditorfilemanagerconnectorsphp folder

The following content was found:

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

// Path to user files relative to the document root.

$Config['UserFilesPath'] =

// Path to user files relative to the document root.

$Config['UserFilesPath'] =
 代码如下 复制代码

// Path to user files relative to the document root.

$Config['UserFilesPath'] = '/uploadfiles/'.date("Ym")."/" ;

was changed to:

The code is as follows Copy code

// Path to user files relative to the document root.

$Config['UserFilesPath'] = '/uploadfiles/'.date("Ym")."/" ;

The uploaded files will be stored according to date.

 代码如下 复制代码

// Do a cleanup of the file name to avoid possible problems

function SanitizeFileName( $sNewFileName )

{

global $Config ;

$sNewFileName = stripslashes( $sNewFileName ) ;

// Replace dots in the name with underscores (only one dot can be there... security issue).

if ( $Config['ForceSingleExtension'] )

 $sNewFileName = preg_replace( '/.(?![^.]*$)/', '_', $sNewFileName ) ;

// Remove / | : ? * " < >

$sNewFileName = preg_replace( '/\|/|||:|?|*|"|<|>/', '_', $sNewFileName );

return $sNewFileName ;

}

Second: Rename

Please modify the io.php file in this folder
 代码如下 复制代码

// Do a cleanup of the file name to avoid possible problems

function SanitizeFileName( $sNewFileName )

{

global $Config ;

$sNewFileName = stripslashes( $sNewFileName ) ;

// Replace dots in the name with underscores (only one dot can be there... security issue).

if ( $Config['ForceSingleExtension'] )

 $sNewFileName = preg_replace( '/.(?![^.]*$)/', '_', $sNewFileName ) ;

$sExtension = substr( $sNewFileName, ( strrpos($sNewFileName, '.') + 1 ) ) ;

$sNewFileName = my_setfilename().'.'.$sExtension;

return $sNewFileName ;

}

function my_setfilename(){

$gettime = explode(' ',microtime());

$string = 'abcdefghijklmnopgrstuvwxyz0123456789';

$rand = '';

for ($x=0;$x<12;$x++)

 $rand .= substr($string,mt_rand(0,strlen($string)-1),1);

return date("ymdHis").substr($gettime[0],2,6).$rand;

}


 

Found:
The code is as follows Copy code
// Do a cleanup of the file name to avoid possible problems function SanitizeFileName( $sNewFileName ) { global $Config ; $sNewFileName = stripslashes( $sNewFileName ) ; // Replace dots in the name with underscores (only one dot can be there... security issue). if ( $Config['ForceSingleExtension'] ) $sNewFileName = preg_replace( '/.(?![^.]*$)/', '_', $sNewFileName ) ; // Remove / | : ? * " < > $sNewFileName = preg_replace( '/\|/|||:|?|*|"|<|>/', '_', $sNewFileName ); return $sNewFileName ; }
was changed to:
The code is as follows Copy code
// Do a cleanup of the file name to avoid possible problems function SanitizeFileName( $sNewFileName ) { global $Config ; $sNewFileName = stripslashes( $sNewFileName ) ; // Replace dots in the name with underscores (only one dot can be there... security issue). if ( $Config['ForceSingleExtension'] ) $sNewFileName = preg_replace( '/.(?![^.]*$)/', '_', $sNewFileName ) ; $sExtension = substr( $sNewFileName, ( strrpos($sNewFileName, '.') + 1 ) ) ; $sNewFileName = my_setfilename().'.'.$sExtension; return $sNewFileName ; } function my_setfilename(){ $gettime = explode(' ',microtime()); $string = 'abcdefghijklmnopgrstuvwxyz0123456789'; $rand = ''; for ($x=0;$x<12;$x++) $rand .= substr($string,mt_rand(0,strlen($string)-1),1); return date("ymdHis").substr($gettime[0],2,6).$rand; }

Fckeditor upload image file name duplicate name and Chinese garbled solution

After testing, Fckeditor 2.6.6 did not solve the problem of the Chinese name of the uploaded file becoming garbled. This is because Fckeditor did not rename the file when implementing the upload function, which easily led to the problem of duplicate names and garbled characters for uploaded image files.

The solution to uploading image files with duplicate names and garbled characters is as follows

Open commands.php in the editor/filemanager/connectors/php directory, find the FileUpload function, in

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

 $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ;

后添加
$sFileName = rand(0,100).".".$sExtension;

$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ; Add after
$sFileName = rand(0,100).".".$sExtension;

The rand function here can change the renaming rules as needed.
Another solution to the garbled file name of the uploaded image is to use the iconv function to convert the file name, but there is still a problem of duplicate names, so it is best to rename the file name of the uploaded image to Fckeditor.

Fckeditor uploads pictures to add watermark function

It is essential for website owners to protect the copyright of images and add watermarks. We can use the PHP watermark function combined with the Fckeditor file upload function FileUpload to implement the image watermark function. For watermark functions, please refer to the PHP image watermark function: Supports the use of images and Add watermark to an article in text mode.

$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 points: 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.

Summary of ideas for PHP image watermark function:
First, calculate the width and height of the target image, watermark image, and text, and then calculate the location information of the final watermark based on the specific location, that is, the X and Y values. Finally, the pictures are combined, and the new picture is added with a watermark.

The code is as follows Copy code

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("Unsupported watermark image file type");
exit;
}
                             
Imagedestroy($dst_img);
Imagedestroy($srcim);
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631534.htmlTechArticleThis article will introduce to students what you need to know about renaming and adding watermark configurations when uploading files using ckeditor. Students can enter for reference. First of all: I want the uploaded file to be based on the date...
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