• php+ajax进度条实时显示文件处理进度


    结合网上高手的图片色调检查程序,做了这个小东西。可以将文件夹中颜色大面积接近人体肤色的图片检查出来。

    这是我学习中做的,也是发布的第一个程序,肯定有很多问题,大家不要丢砖啊

    先上几张截图

    半天没找到哪里发附件,源码没发上了,有

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <title>图片检查</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <script type="text/javascript" src="ajax_min.js"></script>
    <style>
    body{font-size:13px;}
    .a{color:#666}
    .red{color:#F00}
    #status{ 590px; height:30px; overflow:hidden; line-height:30px; padding-left:10px; margin:5px 0px; border:1px #333 solid; background-color:#F7F7F7; color:#000; text-align:left}
    .info { height:25px;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align:left}
    #now{1%; height:20px;background-color:#099; text-align:left}
    #time{position:absolute; z-index:400; margin-top:-20px;600px; height:20px; line-height:20px; color:#C30; border:0px; text-align:center}
    #info{600px; height:20px; line-height:20px; background-color:#FFF; color:#C30; border:1px #666 solid; margin-bottom:5px; text-align:left}
    #scrolldIV{overflow-y:auto;overflow-x:hidden; height: 200px;  590px; border: 1px solid #999; text-align:left; padding:5px 5px 30px 5px}
    </style>
    <script type="text/javascript">
    function $(id){
    return 	document.getElementById(id);
    }
    function result(text){
    var msg=text.split("|");
    $("status").innerHTML=msg[0];	
    $("scrolldIV").innerHTML+=msg[1];
    $('scrolldIV').scrollTop =$('scrolldIV').scrollHeight;
    }
    function callBack_result(text){//回调函数
    //alert(text);
    var msg=text.split("|");
    var txt=msg[1].split(",");
      if (txt[0]==1){
        $("scrolldIV").innerHTML+=txt[1];
       }
    if (msg[0]==0){//
    $("show").style.display='none';
    $("scrolldIV").style.display='';
    $("scrolldIV").innerHTML=msg[1];
    }else{
    $("status").innerHTML="("+msg[4]+"/"+msg[3]+") "+msg[6];
    var n=msg[7];
    var div = $('scrolldIV');
    $('time').innerHTML=(n*100).toFixed(0)+'%';
    $('time').style.color=(n*100).toFixed(1)>=50?'#FFF':'#C30';
    $('now').style.width=(n*100)+'%';
    div.scrollTop = div.scrollHeight;
    if (msg[8]==0){	
    ajax.get("check.php?act=ok&do=c&f="+msg[2]+"&total="+msg[3]+"&now="+msg[4]+"&err="+msg[5]+"&now_f="+msg[6],callBack_result);
    }else if(msg[8]==1) {
    $("status").innerHTML='正在进行扫尾工作……';
    ajax.get("check.php?act=ok&do=d&f="+msg[2]+"&err="+msg[5],result);
    }
    }
    }
    function check(){
    $("show").style.display='';
    $("scrolldIV").style.display='';
    $("scrolldIV").innerHTML='';
    $("status").innerHTML='数据初始化中,请稍后……';
    $('time').innerHTML='0%';
    $('time').style.color='#C30';
    $('now').style.width='0%';
    var mulu=$("mulu").value;
    ajax.get("check.php?act=ok&mulu="+mulu+"&Rnd="+ new Date().getTime(),callBack_result);
    }  
    </script>
    
    </head>
    <body>
    <div style="margin:30px auto" align="center">
    <form id="form1" name="form1" method="post" action="?act=mulu">
     <p> 输入目录:
      <input name="mulu" type="text" id="mulu" size="50" />
      <input type="button" name="button" id="button" value="搜索" onclick="check();" /> 
      (默认为当前目录)</p>
    </form>
    <div id="show" style="display:none">
    <div id="status"></div>
    <div id="info">
       <div id="now"></div><div id="time"></div></div>
    </div>
    <div id="scrolldIV" style="display:none"></div>
    </div>
    </body>
    </html>
    
    
    <?php
    header("content-Type: text/html; charset=gb2312");
    error_reporting(0);
    ini_set('display_errors',0) ;
    set_time_limit(0);
    date_default_timezone_set("PRC");
    $infotime=date('YmdHis');
    
    //函数开始————————
    //列出所有文件
    function get_all_files($path){
        $list = array();
        foreach( glob( $path . '/*') as $item ){
            if( is_dir( $item ) ){
             $list = array_merge( $list , get_all_files( $item ) );
            }
            else{
             if(eregi(".jpg",$item)||eregi(".gif",$item)){
    			 $list[] = $item;
    			 }//这里可以增加判断文件名或其他。changed by:edlongren
             //$list[] = $item;
            }
        }
        return $list;
    }
    
    function openImageFile($file_name){   
        list($width, $height, $type, $attr) = getimagesize($file_name);   
        switch ($type){   
    	        case 1 :   
                $ext = "gif";   
                break;   
            case 2 :   
                $ext = "jpeg";   
                break;   
            case 3 :   
                $ext = "png";   
                break;   
        }
    	$image_handle='imagecreatefrom'.$ext;
        $image_handle=$image_handle($file_name); 
        return array('image_handle'=>$image_handle,'width'=>$width,'height'=>$height);   
    }   
    function testSkin($image_handle,$width,$height){   
        $skin_pix = 0;   
        for($w=0;$w<$width;$w++){   
            for ($h=0;$h<$height;$h++){   
                //验证图片   
                $rgb = imagecolorat($image_handle,$w,$h);   
                $r = ($rgb >> 16) & 0xFF;   
                $g = ($rgb >> 8) & 0xFF;   
                $b = $rgb & 0xFF;   
                $Y=0.299*$r+0.587*$g+0.114*$b;   
                $Cb=0.564*($b-$Y)+128;   
                $Cr=0.713*($r-$Y)+128;   
                if($Cb >= 86 && $Cb <= 117 && $Cr >= 140 && $Cr <= 168){   
                    $skin_pix ++;   
                }   
            }   
        }   
        $skin_rate =  $skin_pix/($width*$height);   
        return $skin_rate;   
    }
    //函数结束————————
    	//echo $list;
    	//echo $path;
    if (isset($_GET['act'])){
    	$do=isset($_GET['do'])?$_GET['do']:'f';
    	$path=!empty($_GET['mulu'])?trim($_GET['mulu']):'.';
    	$list=!empty($_GET['list'])?nl2br($_GET['list']):'';
    if(($path||!empty($list))&&$do=='f'){   //读取要检查的对象
    	if (!empty($list)){
    	$img_list=explode('<br />',$list);//统计页面总数
    	if (count($img_list)==0) $img_list[]=$list;
    	}else{
    $img_list=get_all_files($path);
    	}
    	$img_list=array_unique($img_list);
    $count=count($img_list);
    if ($count>0){
    	//写入检查文件列表
    $f_w="array(";
    	foreach ($img_list as $e_img){
    	$f_w.="'".$e_img."', \n";	
    	}
    $f_w=rtrim($f_w,",").")";
    	$user_now_list="<?php \n";
    	$user_now_list.="\$f_list=".$f_w." \n";
        $user_now_list.="?>";
    		$fp = @fopen('temp/'.$infotime.'_temp.php', "w"); 
    fwrite($fp,$user_now_list); 
    fclose($fp);
    
    die ("1|1,当前搜索目录为: <font class=red>".$path."</font><br/>共搜索到 <font class=red>".$count."</font> 张图片,开始检测……<br/>|".$infotime."|".$count."|0|0|初始化完毕!|0|0");
    	}else{
    die ("0|<p>当前搜索目录为: <font class=red>".$path."</font></p><p>共搜索到 <font class=red>0</font> 张图片</p>");
    	}
    }
      if ($do=='c'){//检查图片
    	  $f_name=$_GET['f'];
    	 $f_total=intval($_GET['total']);
    	 $f_now=intval($_GET['now']);
         $err=intval($_GET['err']);
    include "temp/{$f_name}_temp.php";
    	$file_name =$f_list[$f_now];
    	$f_now+=1;
    	$go=($f_total==$f_now)?1:0;
        if(is_file($file_name)){
            //文件存在  
            $image = openImageFile($file_name);   
            $rate = testSkin($image['image_handle'],$image['width'],$image['height']);   
            if($rate > 0.3){
    			$err+=1;
    die("1|1,<font class=red>警告:<a href=\"$file_name\" target=\"_blank\">".$file_name."</a> 特征明显!肤色比例:".$rate." </font><br/>|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);		
            }else {   
    die("1|0,0|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);
            }   
        }else {   
    die("1|1,系统找不到 ".$file_name." 文件! <br/>|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);
        }
      }
    if ($do=='d'){//扫尾工作,删除临时文件
    	$f_name=$_GET['f'];
    	 $err=intval($_GET['err']);
    	if (unlink("temp/{$f_name}_temp.php")){
    	die("扫描完成!|<p>共找到 <font class=red>".$err."</font> 个可疑文件</p>");
    	}else{
    		die("扫描完成!|共找到 <font class=red>".$err."</font> 个可疑文件<br/><p>临时文件<font class=red> ".$f_name."</font> 删除失败,请手动删除!</p>");	
    	}
      }
      
    }
    ?> 
    

  • 相关阅读:
    2018年3月20日java
    2018年3月19日Java
    浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。
    如果用css的border属性画一个三角形
    js事件(event)的运行原理
    如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */
    js创建对象的高级模式
    查看release的SHA1
    集成百度地图定位和导航功能时出现包冲突
    【十次方基础教程(后台)】MongoDB相关
  • 原文地址:https://www.cnblogs.com/jkll/p/1885353.html
Copyright © 2020-2023  润新知