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>" ); } } } ?> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容