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

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

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

先上几张截图

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<!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{ width: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{width:1%; height:20px;background-color:#099; text-align:left}
#time{position:absolute; z-index:400; margin-top:-20px;width:600px; height:20px; line-height:20px; color:#C30; border:0px; text-align:center}
#info{width: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; width: 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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?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>");   
    }
  }
   
}
?>

posted @   剑客落落  阅读(2010)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
阅读排行:
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容
点击右上角即可分享
微信分享提示