<?php
if(validatorImage(“1.jpg”))
echo ‘是低俗图片<br />’;
else
echo ‘不是低俗图片<br />’;
function validatorImage($fileName){
$image = getImage($fileName);
$width = ImagesX($image);
$height = ImagesY($image);
$ycb = 0;
for($y=0;$y<$height;$y++){
for($x=0;$x<$width;$x++){
$rgb = ImageColorAt($image,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$ycbcr = rgb2ycbcr($r,$g,$b);
if((86<=$ycbcr['cb']&&$ycbcr['cb']<=117)&&(140<=$ycbcr['cr']&&$ycbcr['cr']< 168)){
$ycb++;
}
}
}
imagedestroy($image);
if($ycb>(floatval($width)*floatval($height)*0.3))
return true;
else
return false;
}
function getImage($fileName){
$info = getImageSize($fileName);
$ext = null;
switch ($info[2]) {
case 1 :
$ext = “gif”;
break;
case 2 :
$ext = “jpeg”;
break;
case 3 :
$ext = “png”;
break;
}
$function = ‘ImageCreateFrom’.ucfirst($ext);
$resource = $function($fileName);
return $resource;
}
// RGB 转 YCbCr色彩
function rgb2ycbcr($r,$g,$b){
$r = floatval($r);
$g = floatval($g);
$b = floatval($b);
$y = 0.299*$r + 0.587*$g + 0.114*$b;
$cb = (1 / 1.772) * ($b – $y) + 128;
$cr = (1 / 1.402) * ($r – $y) + 128;
return array(‘y’=>$y,’cb’=>$cb,’cr’=>$cr);
}
?>
上面是通过 RGB色彩模型 转成 YCbCr色彩模型 在 YCbCr色彩模型 判断低俗色的占比,如果商用还要加上肌肤色的过滤及对低俗部位的判断,依据比例对图片进行分类。