1
0
mirror of https://git.tt-rss.org/git/tt-rss.git synced 2026-01-19 01:35:27 +00:00

try to improve color guessing algorithm a bit

This commit is contained in:
Andrew Dolgov
2013-04-15 17:01:51 +04:00
parent e7480cc13b
commit 6ac722d5b1
3 changed files with 64 additions and 50 deletions

View File

@@ -1,5 +1,7 @@
<?php
require_once "lib/floIcon.php";
function _resolve_htmlcolor($color) {
$htmlcolors = array ("aliceblue" => "#f0f8ff",
"antiquewhite" => "#faebd7",
@@ -278,4 +280,62 @@ function hsl2rgb($arr) {
return array($r, $g, $B);
}
function colorPalette($imageFile, $numColors, $granularity = 5) {
$granularity = max(1, abs((int)$granularity));
$colors = array();
$size = @getimagesize($imageFile);
if (strtolower($size['mime']) == 'image/vnd.microsoft.icon') {
$ico = new floIcon();
@$ico->readICO($imageFile);
if(count($ico->images)==0)
return null;
else
$img = @$ico->images[count($ico->images)-1]->getImageResource();
} else {
$img = @imagecreatefromstring(file_get_contents($imageFile));
}
if (!$img) return false;
for($x = 0; $x < $size[0]; $x += $granularity) {
for($y = 0; $y < $size[1]; $y += $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 calculate_avg_color($iconFile) {
$palette = colorPalette($iconFile, 4, 4);
if (is_array($palette)) {
foreach ($palette as $p) {
$hsl = rgb2hsl(_color_unpack("#$p"));
if ($hsl[1] > 0.25 && $hsl[2] > 0.25 &&
!($hsl[0] >= 0 && $hsl[0] < 0.01 && $hsl[1] < 0.01) &&
!($hsl[0] >= 0 && $hsl[0] < 0.01 && $hsl[2] > 0.99)) {
return _color_pack(hsl2rgb($hsl));
}
}
}
return false;
}
?>