Определение доминирующих тонов на изображении PHP
Скрипт определяет основные цвета изображения.
Параметр $url ссылка на изображения, а $count — количество доминирующих цветов.
class GeneratorImageColorPalette {
function getImageColor($imageFile_URL, $numColors, $image_granularity = 5) {
$image_granularity = max(1, abs((int)$image_granularity));
$colors = array();
$size = @getimagesize($imageFile_URL);
if($size === false) {
user_error("Unable to get image size data");
return false;
}
$image_ext = strtolower(strrchr($imageFile_URL,"."));
if ($image_ext == ".gif") { $filetype = 1;
} elseif ($image_ext == ".jpg") { $filetype = 2;
} elseif ($image_ext == ".jpeg") { $filetype = 2;
} elseif ($image_ext == ".png") { $filetype = 3;
} else { $filetype = false; }
if ($filetype == 1) { $img = imagecreatefromgif($imageFile_URL); }
elseif ($filetype == 2) { $img = imagecreatefromjpeg($imageFile_URL); }
elseif ($filetype == 3) { $img = imagecreatefrompng($imageFile_URL); }
if(!$img) {
user_error("Unable to open image file");
return false;
}
for($x = 0; $x < $size[0]; $x += $image_granularity) {
for($y = 0; $y < $size[1]; $y += $image_granularity) {
$thisColor = imagecolorat($img, $x, $y);
$rgb = imagecolorsforindex($img, $thisColor);
$red = round(round(($rgb['red'] / 0x33)) * 0x33);
$green = round(round(($rgb['green'] / 0x33)) * 0x33);
$blue = round(round(($rgb['blue'] / 0x33)) * 0x33);
$thisRGB = sprintf('%02X%02X%02X', $red, $green, $blue);
if(array_key_exists($thisRGB, $colors))
{
$colors[$thisRGB]++;
}
else
{
$colors[$thisRGB] = 1;
}
}
}
arsort($colors);
return array_slice(array_keys($colors), 0, $numColors);
}
function getHtml2Rgb($str_color) {
if ($str_color[0] == '#')
$str_color = substr($str_color, 1);
if (strlen($str_color) == 6)
list($r, $g, $b) = array($str_color[0].$str_color[1],
$str_color[2].$str_color[3],
$str_color[4].$str_color[5]);
elseif (strlen($str_color) == 3)
list($r, $g, $b) = array($str_color[0].$str_color[0], $str_color[1].$str_color[1], $str_color[2].$str_color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
$arr_rgb = array($r, $g, $b);
return $arr_rgb;
}
}
Параметр $url ссылка на изображения, а $count — количество доминирующих цветов.
if (isset($_GET['url']) && !empty($_GET['url'])) {
$img = new GeneratorImageColorPalette();
$url = $_GET['url'];
$count = 10;
$colors = $img->getImageColor($url, $count, $image_granularity = 5);
echo "<center><img src='".$url."'></center>";
for ($i = 0; $i<$count; $i++) {
echo "<br><div id='color' style='float:right;width:60%;height:20px;border:1px solid black;background-color:#".$colors[$i].";'> #".$colors[$i]."</div>";
}
echo "<br><br><br>";
}
13.02.2015, 22:41 -
Категория: Статьи » Программирование » PHP