ckeditor上傳檔案重新命名並加浮水印配置方法_PHP教程

來源:互聯網
上載者:User
本文章來給各位同學介紹關於在使用ckeditor上傳檔案重新命名並加浮水印配置,有需要瞭解的同學可進入參考。


首先:我希望上傳的檔案根據日期來組織檔案夾

請修改editoreditorfilemanagerconnectorsphp檔案夾下的:config.php檔案

找到如下的內容:

代碼如下 複製代碼

// 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")."/" ;

這樣上傳的檔案就按照日期存放了。

其次:重新命名

請修改該檔案夾下的io.php檔案

找到:

代碼如下 複製代碼

// 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 ;

}

修改為:

代碼如下 複製代碼

// 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上傳圖片檔案名稱重名及中文亂碼解決方案

  經測試Fckeditor2.6.6並沒有解決上傳檔案中文名變為亂碼的問題,這是由於Fckeditor實現上傳功能時並沒有將檔案重新命名,容易導致上傳圖片檔案重名及亂碼問題。

上傳圖片檔案重名和亂碼解決方案如下

開啟editor/filemanager/connectors/php目錄下commands.php,找到FileUpload函數,在

代碼如下 複製代碼

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

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

此處rand函數可根據需要自行改變重新命名規則。
另一種上傳圖片檔案名稱亂碼解決方案為使用iconv函數對檔案名稱進行編碼轉換,但仍然存在重名問題,所以針對Fckeditor上傳圖片檔案名稱最好還是重新命名。

Fckeditor上傳圖片添加浮水印功能

對於網站擁有者來說保護圖片著作權添加浮水印必不可少,我們可以利用PHP添加浮水印函數結合Fckeditor檔案上傳函數FileUpload實現圖片添加浮水印功能,浮水印函數請參考PHP圖片浮水印函數:支援以圖片和文字方式添加浮水印一文。

代碼如下 複製代碼

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("不支援的浮水印圖片檔案類型");
exit;
}

imagedestroy($dst_img);
imagedestroy($srcim);
}

$imgSrc:靶心圖表片,可帶相對目錄位址,
$markImg:浮水印圖片,可帶相對目錄位址,支援PNG和GIF兩種格式,如浮水印圖片在執行檔案mark目錄下,可寫成:mark/mark.gif
$markText:給圖片添加的浮水印文字
$TextColor:浮水印文字的字型顏色
$markPos:圖片浮水印添加的位置,取值範圍:0~9
0:隨機位置,在1~8之間隨機選取一個位置
1:頂部居左 2:頂部置中 3:頂部居右 4:左邊置中
5:圖片中心 6:右邊置中 7:底部居左 8:底部置中 9:底部居右
$fontType:具體的字型庫,可帶相對目錄位址
$markType:圖片添加浮水印的方式,img代表以圖片方式,text代表以文字方式添加浮水印

代碼注釋:

第4~6行:擷取靶心圖表片的寬度和高度
第8~22行:根據圖片類型調用不同的函數,獲得操作映像標識符

GetImageSize函數知識點:GetImageSize不需要安裝 GD度就可使用,其傳回值數組有四個元素。索引值0是圖片高度。索引值1是圖片的寬度。索引值2是圖片的檔案格式,其值1為GIF格式、2為JPEG/JPG格式、3為PNG格式。索引值3為圖片的高與寬字元串,height=xxx width=yyy。返回的圖片寬度和高度單位都是像素(pixel)

第24~58行:當選擇圖片方式給靶心圖表片添加浮水印時,擷取浮水印圖片的寬度和高度,通常情況都是網站的logo。如果靶心圖表片比浮水印圖片寬度或者高度小或者浮水印圖片不存在,則跳出這個函數。

return語句知識點:直接return 表示什麼都不返回,直接結束這個函數。也可以理解成返回 NULL。

第60~77行:當選擇文字方式給靶心圖表片添加浮水印時,首先設定浮水印文字的大小,預設我設定為16px,你可以根據需要自行調整字型大小。如果字型檔不存在,跳出函數,最後通過imagettfbbox函數獲得此設定格式的文字的虛擬長寬。

imagettfbbox函數知識點:此函數返回一個含有8個單元的數組表示文本外框的四個角,索引值含義:0代表左下角 X 位置,1代表坐下角 Y 位置,2代表右下角 X 位置,3代表右下角 Y 位置,4代表右上方 X 位置,5代表右上方 Y 位置,6代表左上方 X 位置,7代表左上方 Y 位置。此函數同時需要GD 庫和FreeType庫的支援
max函數返回參數中數值最大的值。

第79~125行:根據設定的圖片浮水印位置計算具體座標值,你可以根據效果具體細化浮水印的位置。

第127~129行:建立一個和靶心圖表片大小一致的圖片。

註:由於imagecreatetruecolor函數範圍的是一個黑色圖片,所以如果你的靶心圖表片是透明的,則產生的新圖將不會是透明色。

第131~162行:根據圖片或者文字方式,最終產生添加了浮水印的圖片。

調用說明:

以函數調用方式調用即可,當然你也可以以類的方式封裝,或者你也可以根據需要將此函數進一步細分模組也可以。當然你現在這樣用也是沒有任何問題的,我已測試過,請放心使用。

其他說明:

由於imagettftext和imagettfbbox函數需要GD庫和FreeType庫的支援,如果你的運行環境不支援GD庫和FreeType庫則文字方式就無法實現,你可以用imagestring函數實現給圖片添加文字浮水印,同時設定下text方式下的$logow和$logoh值即可。

imagejpeg函數也可以設定合成的圖片品質。

PHP圖片加浮水印函數思路總結:
首先計算靶心圖表片、浮水印圖片以及文字的寬度和高度,在根據具體位置計算最終浮水印出現的位置資訊,即X和Y值。最後合成圖片,新的圖片就添加了浮水印。

http://www.bkjia.com/PHPjc/631534.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631534.htmlTechArticle本文章來給各位同學介紹關於在使用ckeditor上傳檔案重新命名並加浮水印配置,有需要瞭解的同學可進入參考。 首先:我希望上傳的檔案根據日...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    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.