-
-
/* - * 関数: PHP 画像透かし (透かしは画像またはテキストをサポートします)
- * パラメーター:
- * $groundImage 背景画像、つまり、必要な画像一時的に透かしを入れる GIF、JPG、PNG 形式のみをサポートします
- * $waterPos の透かし位置、10 個の状態があります、0 はランダムな位置です
- * 1 は左上、2 は上中央、3 は右上です。 4 は左中央、5 は中央中央、6 は右中央を意味します
- * 7 は左下を意味します、8 は中央下を意味します、9 は右下を意味します
- * $waterImage 画像の透かし、つまり現在透かしとして使用されている画像です。 GIF、JPG、PNG 形式のみをサポートします。
- * $waterText テキスト透かし、つまりテキストが透かしとして使用されます。ASCII コードをサポートしますが、中国語はサポートされません。
- * $textFont テキスト サイズ、値は 1、2、3 です。 、4 または 5、デフォルトは 5 ;
- * $textColor テキストの色、値は 16 進数の色の値、デフォルトは #FF0000 (赤);
- *
- * 注: GD 2.0 をサポート、FreeType、GIF 読み取りをサポート、 GIF Create、JPG、PNG
- * $ WaterImage と $waterText を同時に使用しないことをお勧めします。どちらかを選択し、最初に $waterImage を使用します。
- * $waterImage が有効な場合、パラメータ $waterString、$stringFont、および $stringColor は無効になります。
- * 透かし入り画像のファイル名は$groundImageと同じです。
- * 作者: longware
- */
- function imageWaterMark($groundImage,$waterPos=9,$waterImage=””,$waterText=””,$textFont=5,$textColor=”#FF0000″)
- {
- $isWaterImage = FALSE;
- $formatMsg = "このファイル形式はまだサポートされていません。画像処理ソフトウェアを使用して、画像を GIF、JPG、または PNG 形式に変換してください。”;
- //ウォーターマークファイルを読み込みます
- if(!empty($waterImage) && file_exists($waterImage))
- {
- $isWaterImage = TRUE;
- $water_info = getimagesize($waterImage);
- $water_w = $water_info[ 0 ];//ウォーターマーク画像の幅を取得
- $water_h = $water_info[1];//ウォーターマーク画像の高さを取得
- switch($water_info[2])//ウォーターマーク画像の形式を取得
- {
- ケース 1:$water_im = imagecreatefromgif($waterImage);break;
- ケース 2:$water_im = imagecreatefromjpeg($waterImage);break;
- ケース 3:$water_im = imagecreatefrompng($waterImage);break;
- default:die( $formatMsg);
- }
- }
- //背景画像を読み込みます
- if(!empty($groundImage) && file_exists($groundImage))
- {
- $ground_info = getimagesize($groundImage);
- $ground_w = $ground_info[ 0];// 背景画像の幅を取得
- $ground_h = $ground_info[1];// 背景画像の高さを取得
- switch($ground_info[2])// 背景画像の形式を取得
- {
- case 1:$ground_im = imagecreatefromgif($ groundImage);break;
- case 2:$ground_im = imagecreatefromjpeg($groundImage);break;
- case 3:$ground_im = imagecreatefrompng($groundImage);break;
- default:die ($formatMsg);
- }
- }
- else
- {
- die("透かしを入れる必要のある画像が存在しません!");
- }
- //透かしの位置
- if($isWaterImage)//画像の透かし
- {
- $w = $water_w;
- $h = $water_h;
- $label = "画像";
- }
- else//テキスト透かし
- {
- $temp = imagettfbbox(ceil($textFont*2.5),0,"simfang .ttf",$waterText);//TrueType を使用してフォント テキストの範囲を取得します
- $w = $temp[2] – $temp[6];
- $h = $temp[3] – $temp[7];
- unset($temp);
- $label = “テキストエリア”;
- }
- if( ($ground_w<$w) || ($ground_h<$h) )
- {
- echo "画像の長さまたは幅ウォーターマークを付ける必要があるのはウォーターマーク「.$label.」より小さいため、ウォーターマークを生成できません。 ”;
- return;
- }
- switch($waterPos)
- {
- case 0://random
- $posX = rand(0,($ground_w – $w));
- $posY = rand(0,($ground_h) – $h));
- break;
- case 1://1は左上
- $posX = 0;
- $posY = 0;
- break;
- case 2://2は中央上
- $posX = ($ ground_w – $w) / 2;
- $posY = 0;
- break;
- case 3://3 は右上です
- $posX = $ground_w – $w;
- $posY = 0;
- break;
- case 4 : //4 は中央左を意味します
- $posX = 0;
- $posY = ($ground_h – $h) / 2;
- break;
- case 5://5 は中央中央を意味します
- $posX = ($ground_w – $w ) / 2;
- $posY = ($ground_h – $h) / 2;
- break;
- case 6://6 は中右です
- $posX = $ground_w – $w;
- $posY = ($ground_h – $ h) / 2;
- break;
- case 7://7 は、下が左側にあることを意味します
- $posX = 0;
- $posY = $ground_h – $h;
- break;
- case 8://8 は、一番下は中央です
- $posX = ($ground_w – $w) / 2;
- $posY = $ground_h – $h;
- break;
- case 9://9 は右下です
- $posX = $ground_w – $ w;
- $posY = $ground_h – $h;
- break;
- default://random
- $posX = rand(0,($ground_w – $w));
- $posY = rand(0,($ground_h – $h) );
- break;
- }
- //画像ブレンドモードを設定します
- imagealphablending($ground_im, true);
- if($isWaterImage)//画像ウォーターマーク
- {
- imagecopy($ground_im, $water_im, $posX , $ posY, 0, 0, $water_w,$water_h);//ウォーターマークを対象ファイルにコピー
- }
- else//テキストウォーターマーク
- {
- if( !empty($textColor) && (strlen($textColor)== 7) )
- {
- $R = hexdec(substr($textColor,1,2));
- $G = hexdec(substr($textColor,3,2));
- $B = hexdec(substr($textColor, 5) );
- }
- else
- {
- die("透かしのテキストの色の形式が正しくありません。 ”);
- }
- //$waterText=iconv('utf-8','gbk',$waterText);
- imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
- }
- //透かし入り画像を生成
- @unlink($groundImage);
- switch($ground_info[2])//背景画像のフォーマットを取得
- {
- case 1 :imagegif($ground_im,$groundImage);break;
- case 2:imagejpeg($ground_im,$groundImage);break;
- case 3:imagepng($ground_im,$groundImage);break;
- default:die($errorMsg) ) ;
- }
- //メモリを解放します
- if(isset($water_info)) unset($water_info);
- if(isset($water_im)) imagedestroy($water_im);
- unset($ground_info);
- imagedestroy($ ground_im );
- }
//---------------
- if(isset($_FILES) && !empty($_FILES[ ' userfile']) && $_FILES['userfile']['size']>0)
- {
- $uploadfile = “./”.time().”_”.$_FILES['userfile'][' name '];
- if (copy($_FILES['userfile']['tmp_name'], $uploadfile))
- {
- echo "OK
- ";
- //テキストウォーターマーク
- imageWaterMark($uploadfile,9,"Noname .gif”,”www.nj-kingsway.com “,5,”#FF0000″);
- //画像ウォーターマーク
- //$waterImage=”./Hanweb_shuiyin.gif”;//ウォーターマーク画像パス
- //imageWaterMark ( $uploadfile,0,$waterImage);
- echo "";
- }
- else
- {
- echo "Fail
- ";
- }
- }
- ?>
-
コードをコピー
|