diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/colors.php | 60 | ||||
-rw-r--r-- | include/functions.php | 41 | ||||
-rw-r--r-- | include/rssfuncs.php | 13 |
3 files changed, 64 insertions, 50 deletions
diff --git a/include/colors.php b/include/colors.php index d1e970728..19c891517 100644 --- a/include/colors.php +++ b/include/colors.php @@ -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; + } ?> diff --git a/include/functions.php b/include/functions.php index 6372db1fd..306014d96 100644 --- a/include/functions.php +++ b/include/functions.php @@ -512,47 +512,6 @@ } } - function calculate_avg_color($iconFile) { - - require_once "lib/floIcon.php"; - - $imgInfo = @getimagesize($iconFile); - - if(strtolower($imgInfo['mime'])=='image/vnd.microsoft.icon') { - $ico = new floIcon(); - @$ico->readICO($iconFile); - //TODO: error logging - if(count($ico->images)==0) - return null; - else { - $image = @$ico->images[count($ico->images)-1]->getImageResource(); - } - $type = "ico"; - } - elseif(strtolower($imgInfo['mime'])=='image/png') { - $image = imagecreatefrompng($iconFile); - $type = 'png'; - } - elseif(strtolower($imgInfo['mime'])=='image/jpeg') { - $image = imagecreatefromjpeg($iconFile); - $type = 'jpg'; - } - elseif(strtolower($imgInfo['mime'])=='image/gif') { - $image = imagecreatefromgif($iconFile); - $type = 'gif'; - } - //TODO: error logging - if (is_null($image)) - return null; - $width = imagesx($image); - $height = imagesy($image); - $pixel = imagecreatetruecolor(1, 1); - imagecopyresampled($pixel, $image, 0, 0, 0, 0, 1, 1, $width, $height); - $rgb = imagecolorat($pixel, 0, 0); - $color = imagecolorsforindex($pixel, $rgb); - return $color; - } - function print_select($id, $default, $values, $attributes = "") { print "<select name=\"$id\" id=\"$id\" $attributes>"; foreach ($values as $v) { diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 2e522175e..0d55dce36 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -412,18 +412,13 @@ $favicon_file = ICONS_DIR . "/$feed.ico"; if (file_exists($favicon_file)) { - $favicon_color = calculate_avg_color($favicon_file); - require_once "colors.php"; - if (is_array($favicon_color)) - $tmp = array($favicon_color['red'], - $favicon_color['green'], - $favicon_color['blue']); + $favicon_color = db_escape_string($link, + calculate_avg_color($favicon_file)); - $favicon_colorstring = ",favicon_avg_color = '" . - _color_pack($tmp) . "'"; - } + $favicon_colorstring = ",favicon_avg_color = '".$favicon_color."'"; + } db_query($link, "UPDATE ttrss_feeds SET favicon_last_checked = NOW() $favicon_colorstring WHERE id = '$feed'"); |