$token = param('token');
$user = user_from_token($token);
!$user AND exit("
$lang[user_not_exists]
");
//ファイル ストレージ パス
$file_path="./upload/avatar/";
//664 権限は、ファイル所有者とグループ ユーザーが読み取りおよび書き込み可能であり、他のユーザーは読み取り専用ですユーザー。
if(is_dir($file_path) != TRUE) mkdir($file_path, 0664) ;
//アップロードを許可するファイル拡張子を定義します
$ext_arr = array("gif", "jpg", "jpeg", " png ", "bmp");
if (empty($_FILES) === false) {
//判定チェック
$photo_up_size > 2097152 AND exit("
アップロードした写真の数が 200 万を超えています
");
$_FILES["file"]["error"] > 0 AND exit("
ファイルのアップロード中にエラーが発生しました: ".$_FILES["file"]["error"]."
");
//ファイル拡張子を取得します
$temp_arr =explode( ".", $ _FILES["ファイル"]["名前"]);
$file_ext = array_pop($temp_arr)
$file_ext = strto lower($file_ext); /拡張子を確認
if (in_array($file_ext, $ext_arr) === false) {
exit("
アップロードされたファイルの拡張子は許可されていません p> ");
}
//ディレクトリ内の同じプレフィックスを持つファイルを削除
if($dh = opendir($file_path)) {
while(($file = readdir($dh)) !== false) {
$file_arr = $file.split('.');
if($file_arr[0] == $user['uid']) unlink($file_path.$file)
}
}
//名前を変更uidのファイル
$new_name = $user['uid'].".".$file_ext; //ファイルを保存ディレクトリに移動
move_uploaded_file($_FILES["file"]["tmp_name"], $ file_path.$new_name
);
//管理用データテーブルにファイル格納情報を書き込む
user_update($user['uid'], array('avatar'=>time())); ;p class=' iframe_message' status='1'>ファイルは正常にアップロードされました
");
} else {
exit("
正しいファイルがありませんアップロード< /p>");
}
function ext($filename) {
return strto lower(substr(strrchr($filename, '.'), 1));
}
/ *
例:
thumb(APP_PATH.'xxx.jpg', APP_PATH.'xxx_thumb.jpg', 200, 200);
Return:
array('filesize'=>0, 'width'=>0) , ' height'=>0)
*/
function thread($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) {
$return = array('filesize'=>0, 'width' =>0, '高さ'=>0);
$imgcomp = 10;
$destext = ext($destfile);
if(!in_array($destext, array('gif', 'jpg', ' bmp' , 'png'))) {
return $return;
$imgcomp = 100 - $imgcomp;
$src_width = $imginfo[0]; = $ imginfo[1];
if($src_width == 0 || $src_height == 0) {
return $return;
$src_scale = $src_width / $src_height; ;
if(!function_exists('imagecreatefromjpeg')) {
copy($sourcefile, $destfile)
$return = array('filesize'=>filesize($destfile), 'width'=>$src_width , ' height'=>$src_height);
return $return;
// 指定された比率に従って縮小します
if($src_width <= $forcedwidth && $src_height <= $forcedheight) {
$ des_width = $src_width = $src_height;
} elseif($src_scale >= $des_scale) {
$des_width = ($src_width >= $forcedwidth) : $src_height = $ des_width / $ src_scale;
$des_height = ($des_height >= $forcedheight) : $forcedheight;
$des_height = ($src_height >= $forcedheight) : $src_height; $des_width = $des_height * $src_scale;
$des_width = ($des_width >= $forcedwidth) ? $forcedwidth : $des_width;
}
case 'image/jpeg ':
$img_src = imagecreatefromjpeg($sourcefile);
!$img_src && $img_src = imagecreatefromgif($sourcefile);
case 'image/gif':
$img_src = imagecreatefromgif($sourcefile); img_src && $ img_src = imagecreatefromjpeg($sourcefile);
case 'image/png':
$img_src = imagecreatefrompng($sourcefile);
case 'image/wbmp':
$img_src = imagecreatefromwbmpソースファイル);
デフォルト:
$return;$ IMG_DST = ImageCreatetrueColor($ des_width、$ des_height); , $img_src, 0, 0, 0, 0, $des_width, $des_height, $src_width, $src_height);
//$tmpfile = $temp_path.md5($destfile); $ destext) {
case 'jpg': imagejpeg($img_dst, $tmpfile, $imgcomp);
case 'gif($img_dst, $tmpfile, $imgcomp); imagepng ($img_dst, $tmpfile, version_compare(PHP_VERSION, '5.1.2') == 1 ? 7 : 70);
}
$r = array('filesize'=>filesize($tmpfile), '幅 '=>$des_width, '高さ'=>$des_height);;
copy($tmpfile, $destfile);
imagedestroy($img_dst);
}
/*
* 画像のトリミング
*
* @param string $srcname 元の画像のパス (絶対パス/*.jpg)
* @param string $forcedheight トリミング後に新しい名前を生成します (絶対パス/rename.jpg)
* @param int $sourcefile トリミングされた画像の X 座標
* @param int $destfile トリミングされた画像の Y 座標
* @param int $destext トリミングされた領域の幅
* @param int $imgcomp area
clip('xxx/x.jpg', 'xxx/newx.jpg', 10, 40, 150, 150) の高さ
*/
function Clip($sourcefile, $destfile, $clipx, $clipy, $clipwidth , $clipheight) {
$getimagesize($sourcefile);
if(empty($getimgsize)) {
return 0;
} else {
$imgwidth = $getimagesize($sourcefile); getimgsize[ 1];
if($imgwidth == 0 || $imgheight == 0) {
return 0;
}
}
if(!function_exists('imagecreatefromjpeg')) {
copy($sourcefile, $ destfile);
return filesize($destfile);
switch($getimgsize[2]) {
ケース 1 :
$imgcolor = imagecreatefromgif($sourcefile)
break; $sourcefile );
break;
$imgcolor = imagecreatefrompng($sourcefile);
$img_dst = imagecreatetruecolor($clipwidth, $clipheight); ;
$img_color = imagecolorallocate($img_dst, 255, 255, 255);
imagefill($img_dst, 0, 0, $img_color); $imgwidth , $imgheight, $imgheight);
$tmpfile = $destfile,
$n = filesize($tmpfile); );
return $n;
}
// 幅と高さを返す必要がないと判断されたため、最初にトリミングしてから縮小します。
function Clip_thumb($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) {
// 元の画像の幅と高さを取得します
$getimgsize = getimagesize($sourcefile)
if(empty($getimgsize); )) {
リターン 0;
} else {
$src_width = $getimgsize[0];
$src_height == 0 || $src_height == 0) { 0;
}
}
$src_scale = $src_width / $src_height;
$des_scale = $forcedwidth && $src_height <= $forcedheight; des_width = $src_wi dth ;
$des_height = $src_height;
$n = Clip($sourcefile, $destfile, 0, $des_width, $des_height);
return filesize($destfile);は横長の長方形です
} elseif($src_scale >= $des_scale) {
// 元の画像の高さを基準として省略します
$des_height = $src_height / $des_scale; $n = クリップ($sourcefile, $destfile, 0, 0, $des_width, $des_height);
if($n return $ r['filesize'];
// 元の画像は縦長の長方形です
} else {
// 元の画像の幅を基準にして短くします
$des_width = $src_width ;
$des_height = $src_width / $ des_scale;
$n = クリップ($sourcefile, $destfile, 0, $des_width, $des_height);
if($n return $r['filesize']
}
}
?>
戻り値の内容を php で設定すると、次のようになります。対応する状況が発生した後、返されたコンテンツがページ iframe に表示されるため、フロントエンドが返されたコンテンツを取得してそれに応じて処理できるように、対応するクラスを設定します。 Clip() と Clip_thumb() は、画像サイズを圧縮できる画像トリミング関数です。画像は左上隅から長さと幅が 100 の正方形に切り取られます。
js:
コードをコピー
コードは次のとおりです:
var jsubmit_file = jinput.filter('[name="submit_file"]');
var jfile = jinput.filter('[name="file"]');
var jiframe = $('#iframe'); ;
var jthumb = $('.thumb');
var type = '';
jfile.on('change', function() {
var path = jfile.val();
var file_arr = path.split ('.');
type = file_arr.length-1]
jsubmit_file.trigger('load', function() {
var jiframe_message = $ (window.frames['iframe'].document).find('.iframe_message');
if(jiframe_message.attr('status') != 0) {
var url = this.contentWindow.location.href; var url_arr = url.split('=');
jthumb.attr('src', url_arr[1] + '.' + type);
alert(jiframe_message.text());
これは基本的に、画像のアップロード、アップロード結果のプロンプト、およびアップロードされた最新のアバターのリアルタイム表示の機能を実現します。私たちの選択で。
http://www.bkjia.com/PHPjc/762610.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/762610.html技術記事インターフェースをリダイレクトせずにアバターをアップロードする方法はたくさんありますが、私が使用する方法は iframe を追加することです。コードはそのすぐ下にあります。 html: コードをコピーします。コードは次のとおりです: //route はバックエンド インターフェイスです //upload/avatar は上部です...