PHP 如何阻止用户上传成人照片或者裸照

创建一个新的名叫ImageFilter的类,然后把它放到一个叫做$filter的变量中.

$filter = new ImageFilter;

获取图片的分值并将其放到一个$score变量中.

$score = $filter -> GetScore($_FILES['img']['tmp_name']);

如果图片分值大于或等于60%,那就展示一条(告警)消息.

if($score >= 60){

/*Message*/

}


图片检查类 ImageFilter.class.php

<?php

//

// +-----------------------------------+

// |        Image Filter v 1.0         |

// |      http://www.SysTurn.com       |

// +-----------------------------------+

//

//

//   This program is free software; you can redistribute it and/or modify

//   it under the terms of the ISLAMIC RULES and GNU Lesser General Public

//   License either version 2, or (at your option) any later version.

//

//   ISLAMIC RULES should be followed and respected if they differ

//   than terms of the GNU LESSER GENERAL PUBLIC LICENSE

//

//   This program is distributed in the hope that it will be useful,

//   but WITHOUT ANY WARRANTY; without even the implied warranty of

//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

//   GNU General Public License for more details.

//

//   You should have received a copy of the license with this software;

//   If not, please contact support @ S y s T u r n .com to receive a copy.

//


CLASS ImageFilter

{                              #R  G  B

    var $colorA = 7944996;     #79 3B 24

    var $colorB = 16696767;    #FE C5 BF



    var $arA = array();

    var $arB = array();

    

    function ImageFilter()

    {

        $this->arA['R'] = ($this->colorA >> 16) & 0xFF;

        $this->arA['G'] = ($this->colorA >> 8) & 0xFF;

        $this->arA['B'] = $this->colorA & 0xFF;

        

        $this->arB['R'] = ($this->colorB >> 16) & 0xFF;

        $this->arB['G'] = ($this->colorB >> 8) & 0xFF;

        $this->arB['B'] = $this->colorB & 0xFF;

    }

    

    function GetScore($image)

    {

        $x = 0; $y = 0;

        $img = $this->_GetImageResource($image, $x, $y);

        if(!$img) return false;


        $score = 0;

        

        $xPoints = array($x/8, $x/4, ($x/8 + $x/4), $x-($x/8 + $x/4), $x-($x/4), $x-($x/8));

        $yPoints = array($y/8, $y/4, ($y/8 + $y/4), $y-($y/8 + $y/4), $y-($y/8), $y-($y/8));

        $zPoints = array($xPoints[2], $yPoints[1], $xPoints[3], $y);


        

        for($i=1; $i<=$x; $i++)

        {

            for($j=1; $j<=$y; $j++)

            {

                $color = imagecolorat($img, $i, $j);

                if($color >= $this->colorA && $color <= $this->colorB)

                {

                    $color = array('R'=> ($color >> 16) & 0xFF, 'G'=> ($color >> 8) & 0xFF, 'B'=> $color & 0xFF);

                    if($color['G'] >= $this->arA['G'] && $color['G'] <= $this->arB['G'] && $color['B'] >= $this->arA['B'] && $color['B'] <= $this->arB['B'])

                    {

                        if($i >= $zPoints[0] && $j >= $zPoints[1] && $i <= $zPoints[2] && $j <= $zPoints[3])

                        {

                            $score += 3;

                        }

                        elseif($i <= $xPoints[0] || $i >=$xPoints[5] || $j <= $yPoints[0] || $j >= $yPoints[5])

                        {

                            $score += 0.10;

                        }

                        elseif($i <= $xPoints[0] || $i >=$xPoints[4] || $j <= $yPoints[0] || $j >= $yPoints[4])

                        {

                            $score += 0.40;

                        }

                        else

                        {

                            $score += 1.50;

                        }

                    }

                }

            }

        }

        

        imagedestroy($img);

        

        $score = sprintf('%01.2f', ($score * 100) / ($x * $y));

        if($score > 100) $score = 100;

        return $score;

    }

    

    function GetScoreAndFill($image, $outputImage)

    {

        $x = 0; $y = 0;

        $img = $this->_GetImageResource($image, $x, $y);

        if(!$img) return false;


        $score = 0;


        $xPoints = array($x/8, $x/4, ($x/8 + $x/4), $x-($x/8 + $x/4), $x-($x/4), $x-($x/8));

        $yPoints = array($y/8, $y/4, ($y/8 + $y/4), $y-($y/8 + $y/4), $y-($y/8), $y-($y/8));

        $zPoints = array($xPoints[2], $yPoints[1], $xPoints[3], $y);



        for($i=1; $i<=$x; $i++)

        {

            for($j=1; $j<=$y; $j++)

            {

                $color = imagecolorat($img, $i, $j);

                if($color >= $this->colorA && $color <= $this->colorB)

                {

                    $color = array('R'=> ($color >> 16) & 0xFF, 'G'=> ($color >> 8) & 0xFF, 'B'=> $color & 0xFF);

                    if($color['G'] >= $this->arA['G'] && $color['G'] <= $this->arB['G'] && $color['B'] >= $this->arA['B'] && $color['B'] <= $this->arB['B'])

                    {

                        if($i >= $zPoints[0] && $j >= $zPoints[1] && $i <= $zPoints[2] && $j <= $zPoints[3])

                        {

                            $score += 3;

                            imagefill($img, $i, $j, 16711680);

                        }

                        elseif($i <= $xPoints[0] || $i >=$xPoints[5] || $j <= $yPoints[0] || $j >= $yPoints[5])

                        {

                            $score += 0.10;

                            imagefill($img, $i, $j, 14540253);

                        }

                        elseif($i <= $xPoints[0] || $i >=$xPoints[4] || $j <= $yPoints[0] || $j >= $yPoints[4])

                        {

                            $score += 0.40;

                            imagefill($img, $i, $j, 16514887);

                        }

                        else

                        {

                            $score += 1.50;

                            imagefill($img, $i, $j, 512);

                        }

                    }

                }

            }

        }

        imagejpeg($img, $outputImage);


        imagedestroy($img);


        $score = sprintf('%01.2f', ($score * 100) / ($x * $y));

        if($score > 100) $score = 100;

        return $score;

    }

    

    function _GetImageResource($image, &$x, &$y)

    {

        $info = GetImageSize($image);

        

        $x = $info[0];

        $y = $info[1];

        

        switch( $info[2] )

        {

            case IMAGETYPE_GIF:

                return @ImageCreateFromGif($image);

                

            case IMAGETYPE_JPEG:

                return @ImageCreateFromJpeg($image);

                

            case IMAGETYPE_PNG:

                return @ImageCreateFromPng($image);

                

            default:

                return false;

        }

    }

?>

html全部代码

<?php

error_reporting(0);

/*Include the Nudity Filter file*/

include ('./ImageFliter.class.php');

/*Create a new class called $filter*/

$filter = new ImageFilter;

/*Get the score of the image*/

$score = $filter -> GetScore($_FILES['img']['tmp_name']);

/*If the $score variable is set*/

if (isset($score)) {

/*If the image contains nudity display image score and message. Score value If more than 60%, it consider as adult image.*/

if ($score >= 60){

$error = "<b>Image scored " . $score . "%, It seems that you have uploaded a nude picture.</b>";

/*If the image doesn't contain nudity*/

} else if ($score < 0) {

$error = "<b>Congratulations, you have uplaoded an non-nude image.</b>";

}

}

?>

<!DOCTYPE html>

<html>

<meta charset="utf-8" />

<head>

<title>Nudity Filter - RRPowered</title>

</head>

<body>

<?php echo $error;?>

        <form method="post" enctype="multipart/form-data" action="<?php echo $SERVER['PHP_SELF'];?> ">

        Upload image: 

        <input type="file" name="img" id="img" />

        <br />

        <input type="submit" value="Sumit Image" />

        </form>

</body>

</html>


转载于:https://my.oschina.net/u/1420250/blog/262898

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值