public function avg($force = false) { if (!$this->avg || $force) { $ntot = 0; $mult = 1 << 8 - ColorThief::SIGBITS; $rsum = 0; $gsum = 0; $bsum = 0; for ($i = $this->r1; $i <= $this->r2; $i++) { for ($j = $this->g1; $j <= $this->g2; $j++) { for ($k = $this->b1; $k <= $this->b2; $k++) { $histoindex = ColorThief::getColorIndex($i, $j, $k); $hval = isset($this->histo[$histoindex]) ? $this->histo[$histoindex] : 0; $ntot += $hval; $rsum += $hval * ($i + 0.5) * $mult; $gsum += $hval * ($j + 0.5) * $mult; $bsum += $hval * ($k + 0.5) * $mult; } } } if ($ntot) { $this->avg = array(~~($rsum / $ntot), ~~($gsum / $ntot), ~~($bsum / $ntot)); } else { // echo 'empty box'."\n"; $this->avg = array(~~($mult * ($this->r1 + $this->r2 + 1) / 2), ~~($mult * ($this->g1 + $this->g2 + 1) / 2), ~~($mult * ($this->b1 + $this->b2 + 1) / 2)); } } return $this->avg; }
public function __construct() { $this->vboxes = new PQueue(function ($a, $b) { return ColorThief::naturalOrder($a['vbox']->count() * $a['vbox']->volume(), $b['vbox']->count() * $b['vbox']->volume()); }); }