色情图片识别

foreach ($posts as $k => $v) {
    $pics = $v->vPics->get_val();

    $filename = $pics[0]->val;
    $arr = getimagesize($filename);
    list($width, $height, $type) = getimagesize($filename);
    switch ($type) {
        case '1':
            $rs = imagecreatefromgif($filename);
            break;
        case '2':
            $rs = imagecreatefromjpeg($filename);
            break;
        case '3':
            $rs = imagecreatefrompng($filename);
            break;
    }

    // if ($width>$height) {
    //     $w = 300;
    //     $h = $height*(300/$width);
    // }else{
    //     $h = 300;
    //     $w = $width*(300/$height);
    // }

    // $rs_thumb = imagecreatetruecolor($w, $h);
    // imagecopyresampled($rs_thumb, $rs, 0, 0, 0, 0, $w, $h, $width, $height);

    // 建立输出图像
    $out = imagecreatetruecolor($width, $height);
    $background = imagecolorallocate($out, 0, 0, 0); // 背景设为黑色,失败返回-1
    $white = imagecolorallocate($out, 255, 255, 255);


    $count = 0;
    for ($x=0; $x < $width; $x++) { 
        for ($y=0; $y < $height; $y++) { 
            $rgb = @imagecolorat($rs, $x, $y);
            $r  = ( $rgb  >>  16 ) &  0xFF ;
            $g  = ( $rgb  >>  8 ) &  0xFF ;
            $b  =  $rgb  &  0xFF ;      
            // 判断是否为肤色
            if ($r>95 && $g>40 && $b>20 && $r>$g && $r>$b  && (max($r,$g,$b)-min($r,$g,$b))>15 && abs($r-$g)>15 && ($r-$b)>20 && ($r-$b)<100 ) {
                $color = imagecolorallocate($out, $r, $g, $b);
                imagesetpixel($out, $x, $y, $color);
                $count++;
            }
        }
    }


    // echo $count/($width*$height);
    $data[$k]['pic'] = $filename;
    $data[$k]['val'] = number_format($count/($width*$height), '5');
    $data[$k]['count'] = "{$count}/({$width}*{$height})";
    ob_start();
    imagejpeg($out);
    $buffer = ob_get_clean();
    ob_end_clean();
    $data[$k]['base64'] = 'data:image/jpeg;base64,'.chunk_split(base64_encode($buffer));
}


$this->rsts = $data;

你可能感兴趣的:(PHP)