您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP技术 > PHP应用

一段可以过滤裸体照片的图片上传程序

作者:UncleToo  来源:原创  日期:2014-01-14 16:41:55
收藏  评论:( 1 )  阅读:1140

一段可以过滤裸体照片的图片上传程序

       在以前的文章教程中,我们已经学习了很多关于图片上传的例子了,不管是多文件上传还是AJAX上传。本节教程将给大家呈现一段特殊的PHP上传图片代码,它可以过滤阻止那些裸体的、不健康的图片。

       因为程序实现的原理是通过检测皮肤的像素达到过滤的效果,因此也阻止了一部分婴儿照片的上传,这也是这段代码的缺陷之处,如果各位同学有更好更完善的想法,可以留言与UncleToo互相讨论!


点击下载完整源码


下面我们看看如何实现图片的过滤。

创建用户表

Create TABLE `users` (
`uid` int(11) AUTO_INCREMENT PRIMARY KEY,
`username` varchar(255) UNIQUE KEY,
`password` varchar(100),
`email` varchar(255) UNIQUE KEY
)

插入一条数据

Insert INTO `users`
(`uid`, `username`, `password`, `email`)
VALUES
('1', 'uncletoo', MD5('password'), 'abc@uncletoo.com');

Javascript代码

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.wallform.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#photoimg').live('change', function()
 {
var A=$("#imageloadstatus");
var B=$("#imageloadbutton");
$("#imageform").ajaxForm({target: '#preview',
beforeSubmit:function(){
A.show();
B.hide();
},
success:function(){
A.hide();
B.show();
},
error:function(){
A.hide();
B.show();
} }).submit();
});
});
</script>

这里根据表单提交成功或失败来控制imageloadstatus和imageloadbutton的显示与隐藏。


index.php页面

这个页面中的$session_id='1' 表示用户的ID,存储在session中。

<?php
include('db.php');
session_start();
$session_id='1'; // User login session value
?>
<div id='preview'>
</div>
<form id="imageform" method="post" enctype="multipart/form-data" action='ajaximage.php'>
Upload image:
<div id='imageloadstatus' style='display:none'><img src="loader.gif" alt="Uploading...."/></div>
<div id='imageloadbutton'>
<input type="file" name="photoimg" id="photoimg" />
</div>
</form>

ajaximage.php页面

这个脚本可以帮助我们将过滤后的图片上传到文件夹中,并以时间戳+session_id.extention的格式重新命名图片名称。

<?php
include('db.php');
session_start();
$session_id='1'; // User session id
$path = "uploads/";
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i)
{
return "";
}
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$valid_formats = array("jpg", "png", "gif", "bmp","jpeg","PNG","JPG","JPEG","GIF","BMP");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$name = $_FILES['photoimg']['name'];
$size = $_FILES['photoimg']['size'];
if(strlen($name))
{
$ext = getExtension($name);
if(in_array($ext,$valid_formats))
{
if($size<(1024*1024)) // Image size max 1 MB
{
//---图片过滤
require_once('class.ImageFilter.php');
$filter = new ImageFilter;
$score = $filter->GetScore($_FILES['photoimg']['tmp_name']);
if(isset($score))
{
if($score >= 40)
{
echo "Image scored ".$score."%, It seems that you have uploaded a nude picture :-(";
}
else
{
//---图片过滤
$actual_image_name = time().$session_id.".".$ext;
$tmp = $_FILES['photoimg']['tmp_name'];
if(move_uploaded_file($tmp, $path.$actual_image_name))
{
mysqli_query($connection,"Update users SET profile_image='$actual_image_name' Where uid='$session_id'");
echo "<img src='uploads/".$actual_image_name."' class='preview'>";
}
else
echo "failed";
//---Image Filter Code
}
}
//---Image Filter Code
}
else
echo "Image file size max 1 MB";
}
else
echo "Invalid file format..";
}
else
echo "Please select image..!";
exit;
}
?>


db.php

这是数据库配置文件

<?php
error_reporting(0);
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');
$connection = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>


点击下载完整源码



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/application/786.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论