function GetImagePalette($imagepath, $post_id, $range = 10) { $command = 'convert ' . $imagepath . ' -colors ' . $range . ' +dither -format %c histogram:info: &'; exec($command, $colors, $exit); $palette = array(); foreach ($colors as $color) { preg_match('/( {2,})(\\d+:) (\\(.+\\)) (#.{6}) (.+)/i', $color, $matches); if (isset($matches[2])) { @($PIXELS = (int) substr($matches[2], 0, strlen($matches[2]) - 1)); @($PERCENT = $PIXELS / 120000 * 100); @($HEX = $matches[4]); @($CLEAN_RGBA = str_replace(' ', '', substr($matches[3], 1, strlen($matches[3]) - 2))); // var_dump($CLEAN_RGBA); $P_RGBA = explode(',', $CLEAN_RGBA); $R = $P_RGBA[0]; $G = $P_RGBA[1]; $B = $P_RGBA[2]; if (isset($P_RGBA[3])) { $A = $P_RGBA[3]; } else { $A = null; } $RGBA = array('R' => $R, 'G' => $G, 'B' => $B, 'A' => $A); $RGB = array('R' => $R, 'G' => $G, 'B' => $B); $HSL = RGBToHSL($RGB); $XYZ = RGBToXYZ(array('R' => $RGBA['R'], 'G' => $RGBA['G'], 'B' => $RGBA['A'])); $LAB = XYZToLAB($XYZ); $COLOR_DATA = array('palette_post_id' => $post_id, 'PERCENT' => $PERCENT, 'HEX' => $HEX, 'RGBA_R' => $RGBA['R'], 'RGBA_G' => $RGBA['G'], 'RGBA_B' => $RGBA['B'], 'RGBA_A' => $RGBA['A'], 'HSL_H' => $HSL['H'], 'HSL_S' => $HSL['S'], 'HSL_L' => $HSL['L'], 'LAB_L' => $LAB['L'], 'LAB_A' => $LAB['A'], 'LAB_B' => $LAB['B']); if ($PERCENT > 0.2) { array_push($palette, $COLOR_DATA); } } } return $palette; }
function ChangeLuminosity($RGB, $LuminosityPercent) { $HSL = RGBToHSL($RGB); $NewHSL = (int) ((double) $LuminosityPercent / 100 * 255) + (0xffff00 & $HSL); return HSLToRGB($NewHSL); }
$available[$c] = 0; $row = mysql_fetch_assoc($result2); $reason[$c] = $row['Reden']; } } $query3 = "SELECT KleurInBIS FROM roeigraden WHERE Roeigraad='{$grade}';"; $result3 = mysql_query($query3); if (!$result3) { die("Ophalen van kleuren mislukt." . mysql_error()); } else { $row3 = mysql_fetch_assoc($result3); $bgcolor = $row3['KleurInBIS']; // Check for dark colors $colour = $bgcolor; $rgb = HTMLToRGB($colour); $hsl = RGBToHSL($rgb); $toodark = ''; if ($hsl->lightness < 140) { $toodark = true; } } echo "<tr class='header-column-row'><th "; if ($available[$c] && InRange($date_to_show, 10)) { echo "onclick=\"showInschrijving(0, " . $boat_ids_array[$c] . ", '" . $date_to_show . "', '" . str_replace(' ', '%20', $cat_to_show) . "', '" . $grade_to_show . "', '" . $start_time_to_show . "');\" bgcolor=\"" . $bgcolor . "\" " . ($toodark == true ? 'class="too-dark"' : "") . ">"; } else { echo " bgcolor=\"" . $bgcolor . "\" " . ($toodark == true ? 'class="too-dark"' : "") . ">"; } echo "<div>{$boats_array[$c]}</div></th>"; echo "<td class='text-center " . ($toodark == true ? 'too-dark' : "") . "' bgcolor=\"" . $bgcolor . "\">{$weight} kg</td>"; echo "<td class='text-center " . ($toodark == true ? 'too-dark' : "") . "' bgcolor=\"" . $bgcolor . "\">{$type}</td>"; echo "<td class='text-center " . ($toodark == true ? 'too-dark' : "") . "' bgcolor=\"" . $bgcolor . "\">{$grade}</td></tr>";
function colorSearch($HEX, $VARIATION = 40, $COVERAGE = 10) { if (strlen($HEX) != 6) { // exit('VAI MEXER NO CARALHO!'); } $RGB = HEXToRGB($HEX); $HSL = RGBToHSL($RGB); $XYZ = RGBToXYZ($RGB); $LAB1 = XYZToLAB($XYZ); // CHECK IF HUE IS NEAR 0 - RED $HSL['H'] >= 350 || $HSL['H'] <= 20 ? $RED = true : ($RED = false); // CHECK IF HUE IS NEAR 0 - RED $HSL['H'] >= 21 && $HSL['H'] <= 70 ? $YELLOW = true : ($YELLOW = false); // CHECK IF HUE IS NEAR 120 - GREEN $HSL['H'] >= 71 && $HSL['H'] < 165 ? $GREEN = true : ($GREEN = false); // CHECK IF HUE IS NEAR 240 - BLUE $HSL['H'] >= 1166 && $HSL['H'] < 350 ? $BLUE = true : ($BLUE = false); $H_VARIATION = $VARIATION * 360 / 100 / 20; $L_VARIATION = $VARIATION / 1.2; $S_VARIATION = $VARIATION * 3.5; if ($RED) { $H_VARIATION = $VARIATION * 360 / 100 / 30; $L_VARIATION = $VARIATION * 1.2; $S_VARIATION = $VARIATION / 1.1; } elseif ($YELLOW) { $H_VARIATION = $VARIATION * 360 / 100 / 80; $L_VARIATION = $VARIATION / 1; $S_VARIATION = $VARIATION * 1; } elseif ($GREEN) { $H_VARIATION = $VARIATION * 360 / 100 / 20; $L_VARIATION = $VARIATION / 1; $S_VARIATION = $VARIATION * 1; } elseif ($BLUE) { $H_VARIATION = $VARIATION * 360 / 100 / 20; $L_VARIATION = $VARIATION / 1.2; $S_VARIATION = $VARIATION * 3.5; } $DELTA_VARIATION = 80 / 100 * $VARIATION; $HB = $HSL['H'] - $H_VARIATION * 3.5; $HT = $HSL['H'] + $H_VARIATION * 3; $HB < 0 ? $H_BOTTOM = 360 + $HB : ($H_BOTTOM = $HB); $HT > 360 ? @($H_TOP += $HT - 360) : ($H_TOP = $HT); $DELTA = 0; if ($H_BOTTOM > $H_TOP) { $DELTA = 360 - $H_BOTTOM; $H_BOTTOM = 0; $H_TOP = $H_TOP + $DELTA; } $SB = $HSL['S'] - $S_VARIATION; $ST = $HSL['S'] + $S_VARIATION; $SB < 0 ? $S_BOTTOM = 0 : ($S_BOTTOM = $SB); $ST > 100 ? $S_TOP = 100 : ($S_TOP = $ST); $LB = $HSL['L'] - $L_VARIATION; $LT = $HSL['L'] + $L_VARIATION; $LB < 0 ? $L_BOTTOM = 0 : ($L_BOTTOM = $LB); $LT > 100 ? $L_TOP = 100 : ($L_TOP = $LT); // check if the search color is grey(ish) $HSL['S'] < 3 ? $is_grey = true : ($is_grey = false); $this->db->select('tr_palette.palette_post_id, HEX, PERCENT, HSL_H, HSL_S, HSL_L, LAB_L as L, LAB_A as A, LAB_B as B'); $this->db->distinct(); $this->db->from('palette'); $this->db->join('post', 'tr_post.post_id = tr_palette.palette_post_id', 'inner'); $this->db->where('tr_palette.HSL_H + ' . $DELTA . ' BETWEEN ' . $H_BOTTOM . ' AND ' . $H_TOP); $this->db->where('tr_palette.HSL_S BETWEEN ' . $S_BOTTOM . ' AND ' . $S_TOP); $this->db->where('tr_palette.HSL_L BETWEEN ' . $L_BOTTOM . ' AND ' . $L_TOP); $this->db->where('tr_palette.PERCENT > ' . $COVERAGE); $this->db->where(array('tr_post.post_is_deleted' => 0)); $this->db->group_by('post_id'); $query = $this->db->get(); $COLORS = $query->result(); if (count($COLORS) == 0) { return 0; } $GREY_FILTERED_COLORS = array(); if (!$is_grey) { foreach ($COLORS as $COLOR) { if ($COLOR->HSL_H != 0 && $COLOR->HSL_S != 0 && $COLOR->HSL_S > 15 && $COLOR->HSL_L > 15) { // var_dump($COLOR); array_push($GREY_FILTERED_COLORS, $COLOR); } } } else { foreach ($COLORS as $COLOR) { if ($COLOR->HSL_S == 0 && $COLOR->HSL_S < 3) { // var_dump($COLOR); array_push($GREY_FILTERED_COLORS, $COLOR); } } } return array('post_count' => count($GREY_FILTERED_COLORS), 'posts' => $GREY_FILTERED_COLORS, 'HSL' => $HSL); }
function isDarkColor($color) { global $conf; $lightness_swap = empty($conf->global->FULLCALENDAR_LIGTHNESS_SWAP) ? 150 : $conf->global->FULLCALENDAR_LIGTHNESS_SWAP; $rgb = HTMLToRGB($color); $hsl = RGBToHSL($rgb); return $hsl->lightness < $lightness_swap ? 1 : 0; }