zoukankan      html  css  js  c++  java
  • 违法图片检测

    <?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;
            }
        }
    }
    
    ?>
    
    <?php
    //error_reporting(0);
    
    $error = '';
    var_dump($_FILES);
    if ($_FILES) {
        /*Include the Nudity Filter file*/
        include ('./nf.php');
        /*Create a new class called $filter*/
        $filter = new ImageFilter;
        /*Get the score of the image*/
        $score = $filter -> GetScore($_FILES['img']['tmp_name']);
    
        var_dump($score);
    
        /*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 lang="en">
        <meta charset="utf-8" />
        <head>
            <title>Nudity Filter - RRPowered</title>
        </head>
        <body>
            <?php echo $error;?>
            <form method="post" enctype="multipart/form-data" action="/NudityFilter/index.php">
            Upload image: 
            <input type="file" name="img" id="img" />
            <br />
            <input type="submit" value="Sumit Image" />
            </form>
        </body>
    </html>
    

      

  • 相关阅读:
    C++学习 之 继承(笔记)
    C++学习 之 类中的特殊函数和this指针(笔记)
    C++学习 之 类的声明及成员的访问(笔记)
    C++学习 之 指针及动态内存分配(笔记)
    C++学习 之 函数的重载及内联(笔记)
    C++学习 之 控制程序流程 (笔记)
    pkg-config too old的解决方法
    编译中出现的undefined reference to XXX
    sourceInsight下标题栏显示文件完整路径
    linux下 sleep() 与 usleep()
  • 原文地址:https://www.cnblogs.com/adtuu/p/4688255.html
Copyright © 2011-2022 走看看