ckeditor でアップロードされたファイルの名前を変更してウォーターマークを追加する方法_PHP チュートリアル

WBOY
リリース: 2016-07-13 16:57:21
オリジナル
1037 人が閲覧しました

この記事では、ckeditor を使用してファイルをアップロードするための名前変更とウォーターマークの追加の設定を紹介します。詳しく知りたい学生は参照してください。


第一に: アップロードされたファイルを日付に基づいてフォルダーに整理したいです

editoreditorfilemanagerconnectorsphp フォルダー内の config.php ファイルを変更してください

次のものが見つかりました:

コードは次のとおりです コードをコピー

// ドキュメントルートを基準としたユーザーファイルへのパス。

$Config['ユーザーファイルパス'] =

次のように変更されました:

コードは次のとおりです コードをコピー

// ドキュメントルートを基準としたユーザーファイルへのパス。

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

アップロードされたファイルは日付に従って保存されます。

2 番目: 名前を変更します

このフォルダー内のio.phpファイルを変更してください

見つかりました:

コードは次のとおりです コードをコピー

// 起こり得る問題を回避するために、ファイル名のクリーンアップを実行します

関数 SanitizeFileName( $sNewFileName )

{

グローバル $Config ;

$sNewFileName = ストリップスラッシュ( $sNewFileName ) ;

// 名前のドットをアンダースコアに置き換えます (ドットは 1 つだけ使用できます...セキュリティ上の問題)。

if ( $Config['ForceSingleExtension'] )

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

// / : ? " < >

を削除します

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

$sNewFileName を返します ;

}

次のように変更されました:

コードは次のとおりです コードをコピー

// 起こり得る問題を回避するために、ファイル名のクリーンアップを実行します

関数 SanitizeFileName( $sNewFileName )

{

グローバル $Config ;

$sNewFileName = ストリップスラッシュ( $sNewFileName ) ;

// 名前のドットをアンダースコアに置き換えます (ドットは 1 つだけ使用できます...セキュリティ上の問題)。

if ( $Config['ForceSingleExtension'] )

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

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

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

$sNewFileName を返します ;

}

関数 my_setfilename(){

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

$string = 'abcdefghijklmnopgrstuvwxyz0123456789';

$ランド = '';

($x=0;$x

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

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

}


Fckeditorでアップロードした際に画像ファイル名が重複したり中国語名が文字化けする問題を解決する方法

テストの結果、Fckeditor 2.6.6 では、アップロードされたファイルの中国語名が文字化けする問題は解決されませんでした。これは、Fckeditor がアップロード機能を実装するときにファイルの名前を変更しなかったため、名前の重複と文字化けの問題が発生しやすかったためです。アップロードされた画像ファイルの文字。

名前が重複して文字化けした画像ファイルをアップロードする場合の解決方法は以下の通りです

editor/filemanager/connectors/php ディレクトリにある Commands.php を開き、

で FileUpload 関数を見つけます。
コードは次のとおりです コードをコピー

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


の後に追加されました $sFileName = rand(0,100).".".$sExtension;

ここでの rand 関数は、必要に応じて名前変更ルールを変更できます。
アップロードした画像のファイル名が文字化けした場合のもう一つの解決策は、iconv関数を使ってファイル名を変換することですが、それでも名前が重複する問題があるため、アップロードした画像のファイル名をFckeditorに変更するのが最善です。

Fckeditorは写真をアップロードして透かし機能を追加します

ウェブサイトの所有者にとって、画像の著作権を保護し、透かしを追加することは不可欠です。PHP 透かし機能と Fckeditor ファイルアップロード機能 FileUpload を組み合わせて画像透かし機能を実装できます。詳しくは、PHP 画像透かし機能を参照してください。機能: 記事に画像とテキストを追加します。

コードは次のとおりです コードをコピー

関数 setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{

$srcInfo = @getimagesize($imgSrc);
    $srcImg_w = $srcInfo[0];
    $srcImg_h = $srcInfo[1];
       
    スイッチ ($srcInfo[2])
    {
        ケース 1:
            $srcim =imagecreatefromgif($imgSrc);
            壊す;
        ケース 2:
            $srcim =imagecreatefromjpeg($imgSrc);
            壊す;
        ケース 3:
            $srcim =imagecreatefrompng($imgSrc);
            壊す;
        デフォルト:
            die("サポートされていない画像ファイルの種類");
            出口;
    }
       
    if(!strcmp($markType,"img"))
    {
        if(!file_exists($markImg) || empty($markImg))
        {
            戻ります;
        }
           
        $markImgInfo = @getimagesize($markImg);
        $markImg_w = $markImgInfo[0];
        $markImg_h = $markImgInfo[1];
           
        if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)
        {
            戻ります;
        }
           
        スイッチ ($markImgInfo[2])
        {
            ケース 1:
                $markim =imagecreatefromgif($markImg);
                壊す;
            ケース 2:
                $markim =imagecreatefromjpeg($markImg);
                壊す;
            ケース 3:
                $markim =imagecreatefrompng($markImg);
                壊す;
            デフォルト:
                die("サポートされていない水印画像ファイルの種類");
                出口;
        }
           
        $logow = $markImg_w;
        $logoh = $markImg_h;
    }
       
    if(!strcmp($markType,"text"))
    {
        $fontSize = 16;
        if(!empty($markText))
        {
            if(!file_exists($fontType))
            {
                戻ります;
            }
        }
        他に{
            戻ります;
        }
           
        $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);
    }
       
    スイッチ($markPos)
    {
        ケース1:
            $x = +5;
            $y = +5;
            休憩;
        ケース 2:
            $x = ($srcImg_w - $logow) / 2;
            $y = +5;
            休憩;
        ケース 3:
            $x = $srcImg_w - $logow - 5;
            $y = +15;
            休憩;
        ケース4:
            $x = +5;
            $y = ($srcImg_h - $logoh) / 2;
            休憩;
        ケース5:
            $x = ($srcImg_w - $logow) / 2;
            $y = ($srcImg_h - $logoh) / 2;
            休憩;
        ケース6:
            $x = $srcImg_w - $logow - 5;
            $y = ($srcImg_h - $logoh) / 2;
            休憩;
        ケース7:
            $x = +5;
            $y = $srcImg_h - $logoh - 5;
            休憩;
        ケース8:
            $x = ($srcImg_w - $logow) / 2;
            $y = $srcImg_h - $logoh - 5;
            休憩;
        ケース9:
            $x = $srcImg_w - $logow - 5;
            $y = $srcImg_h - $logoh -5;
            休憩;
        デフォルト:
            die("この位置はサポートされていません");
            終了します;
    }
       
    $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);
    }
       
    スイッチ ($srcInfo[2])
    {
        ケース1:
            imagegif($dst_img, $imgSrc);
            壊す;
        ケース 2:
            imagejpeg($dst_img, $imgSrc);
            壊す;
        ケース 3:
            imagepng($dst_img, $imgSrc);
            休憩;
        デフォルト:
            die("サポートされていない水印画像ファイルの種類");
            出口;
    }
       
    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 をインストールせずに使用でき、戻り値の配列には 4 つの要素があります。インデックス値 0 は画像の高さです。インデックス値 1 は画像の幅です。インデックス値 2 は画像のファイル形式で、値 1 は GIF 形式、2 は JPEG/JPG 形式、3 は PNG 形式です。インデックス値 3 は、画像の高さと幅の文字列、高さ=xxx 幅=yyy です。返される画像の幅と高さの単位はピクセルです

24~58行目:対象画像に透かしを追加する画像方法を選択する際に、透かし画像(通常はWebサイトのロゴ)の幅と高さを取得します。対象画像の幅または高さが透かし画像より小さい場合、または透かし画像が存在しない場合は、この機能を抜けてください。

Return ステートメントの知識ポイント: 直接リターンとは、何も返さずに関数を直接終了することを意味します。 NULL を返すとも解釈できます。

60~77行目: ターゲット画像に透かしを追加するテキスト方法を選択するとき、最初に透かしテキストのサイズを設定します。デフォルトでは、フォントサイズを16pxに設定します。フォント ファイルが存在しない場合は、関数を抜けて、最後に imagettfbbox 関数を使用してこの形式のテキストの仮想長さと幅を取得します。

imagettfbbox 関数の知識ポイント: この関数は、テキスト フレームの 4 隅を表す 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 ライブラリをサポートしていない場合は、imagettftext 関数を使用してテキスト モードを追加できます。画像にテキストの透かしを追加し、次のように設定します。テキスト モードの $logow および $logoh の値で十分です。

imagejpeg関数では、合成画像の品質も設定できます。

PHP画像透かし機能のアイデアのまとめ:
まず、ターゲット画像、透かし画像、テキストの幅と高さを計算し、次に特定の位置に基づいて最終的な透かしが表示される位置情報、つまり X 値と Y 値を計算します。最後に、写真が結合され、新しい写真に透かしが追加されます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631534.html技術記事この記事では、ckeditor を使用してファイルをアップロードするための名前変更とウォーターマークの追加の設定を紹介します。詳しく知りたい学生は参照してください。 まず第一に、アップロードしたいファイルは日付に基づいています...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート