1. 程式人生 > >TinyMCE外掛:RESPONSIVE filemanager 9 圖片自動新增水印

TinyMCE外掛:RESPONSIVE filemanager 9 圖片自動新增水印

跟蹤function()

搜尋(filemanager/upload.php)

在程式碼中發現,上傳成功後,會傳回JSON資訊資料,於是最後找到方法是

$upload_handler = new UploadHandler($uploadConfig, true, $messages);

同時大叔發現upload.php自己沒有uploadhandler()方法,但是引入入

require('UploadHandler.php');
$messages = null;

於是乎

搜尋(filemanager/UploadHandler.php)

在程式碼中發現UploadHandler{}

是個大類,只能繼續在裡面找方法

發現判斷尺寸真實有效時,會判斷是否為post傳值,如果是會將資料進行操作

if ($initialize) {
    $this->initialize();
}

protected function initialize()
{
    switch ($this->get_server_var('REQUEST_METHOD')) {
        ...
        case 'POST':
            $this->post($this->options['print_response']);
            
break; ... } }

於是檢視post()方法,發現handle_file_upload()方法中放進了所有的POST圖片資訊

public function post($print_response = true)
{
   ...
   $files[] = $this->handle_file_upload(
       isset($upload['tmp_name']) ? $upload['tmp_name'] : null,
       $file_name ? $file_name : (isset($upload['name']) ?
       $upload
['name'] : null), $size ? $size : (isset($upload['size']) ? $upload['size'] : $this->get_server_var('CONTENT_LENGTH')), isset($upload['type']) ? $upload['type'] : $this->get_server_var('CONTENT_TYPE'), isset($upload['error']) ? $upload['error'] : null, null, $content_range ); ... }

檢視handle_file_upload()方法,終於找到了move_uploaded_file()方法,按方法邏輯和兩個引數的值,他正在將post臨時圖片上傳至程式圖片資料夾內。

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null, $content_range = null)
{
    ...
    move_uploaded_file($uploaded_file, $file_path);
    ...
}

於是大叔決定在該函式下增加一個加水印的方法,讓他可以對上傳的每一張圖片操作,但是無論怎麼寫,只要一有操作方法就會各種提示錯誤,於是只能放棄。

這時大叔記起,外掛的縮略並不是直接生成的,他的流程是:

上傳圖片成功->重新重新整理dialog.php->判斷有新圖片存在->自動生成縮圖

於是大叔開始檢視外掛自動生成縮圖的方法,結果一找就找到了,他正好就在上傳圖片的方法下面。

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null, $content_range = null)
{
    ...
    if ($this->is_valid_image_file($file_path)) {
        $this->handle_image_file($file_path, $file);
    }
    ...
}

於是大叔將水印方法寫在下面

if ($this->is_valid_image_file($file_path)) {

    //自動生成縮圖
    $this->handle_image_file($file_path, $file);

    //===========================水印圖片.S
    $src_path = 'mark.png'; //水印圖片
    $dst_path = $file_path; //需要新增水印圖片
    //建立圖片的例項
    $dst = imagecreatefromstring(file_get_contents($dst_path));
    $src = imagecreatefromstring(file_get_contents($src_path));
    //獲取水印圖片的寬高
    list($src_w, $src_h) = getimagesize($src_path);
    //獲取要加水印圖片的寬高
    list($dst_w, $dst_h) = getimagesize($dst_path);
    //將水印圖片複製到目標圖片上,最後個引數50是設定透明度,這裡實現半透明效果
    //imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 50);
    //如果水印圖片本身帶透明色,則使用imagecopy方法
    imagecopy($dst, $src, ($dst_w - $src_w - 10), ($dst_h - $src_h - 10), 0, 0, $src_w, $src_h);
    //輸出圖片
    list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
    switch ($dst_type) {
        case 1://GIF
            header('Content-Type: image/gif');
            imagegif($dst);
            break;
        case 2://JPG
            header('Content-Type: image/jpeg');
            imagejpeg($dst);
            break;
        case 3://PNG
            header('Content-Type: image/png');
            imagepng($dst);
            break;
        default:
            break;
    }

    //清除圖片快取
    imagedestroy($dst);
    imagedestroy($src);
    //===========================水印圖片.E

}

上傳鄧妞...

測試成功!


感謝: