public function test() { $this->status = "Setting up"; $max = 5 * LayeredCanvas::NUM_BLEND_MODES; $this->doProgress(0, $max); // Set up a layered canvas for compositing our image $sw = 320; // $this->rect->w; $ssw = $sw / 5; $sh = 240; $c = new Canvas($sw * 4, $sh * 4, 0); $f = new BitmapFont(3); $f2 = new BitmapFont(0); $fb = new BitmapFont(7); $fb->drawText($c, $c->width - $sw + 20, $c->height - 50, "Cherry LayeredCanvas Demo", 0xffffff); $f->drawText($c, $c->width - $sw + 20, $c->height - 30, "Showing all " . LayeredCanvas::NUM_BLEND_MODES . " available blend modes", 0xffffff); // Preload our canvases $c2 = Canvas::createFromFile("320x240-1.png"); $c1 = Canvas::createFromFile("320x240-2.png"); $cs1 = new Canvas($ssw, $sh); $cs2 = new Canvas($ssw, $sh); for ($blend = 0; $blend < LayeredCanvas::NUM_BLEND_MODES; $blend++) { $this->status = "Rendering " . LayeredCanvas::$blendmodes[$blend]; $tslice = []; for ($slice = 0; $slice < 5; $slice++) { $c1->draw($cs1, $cs1->getRect(), new Rect($ssw * $slice, 0, $ssw, $sh)); $c2->draw($cs2, $cs2->getRect(), new Rect($ssw * $slice, 0, $ssw, $sh)); $lc = new LayeredCanvas($ssw, $sh, $cs1); $lc->addLayer($cs2, $cs2->getRect(), $blend, $slice * 0.25); $tstart = microtime(true); $co = $lc->getCompositeCanvas(); $tslice[] = (double) (microtime(true) - $tstart); $col = $blend % 4; $row = floor($blend / 4); $ostr = sprintf("%d%%", max(0, min(100, $slice * 25))); $f2->drawTextUp($co, $ssw - 11, $sh - 4, $ostr, 0x0); $f2->drawTextUp($co, $ssw - 12, $sh - 5, $ostr, 0xffffff); $co->draw($c, new Rect($col * $sw + $ssw * $slice, $row * $sh, $ssw, $sh)); $this->doProgress($blend * 5 + $slice, $max); } $modestr = sprintf("%s", LayeredCanvas::$blendmodes[$blend]); $f->drawText($c, $col * $sw + 6, $row * $sh + 6, $modestr, 0x0); $f->drawText($c, $col * $sw + 5, $row * $sh + 5, $modestr, 0xffffff); $tslice = array_sum($tslice); $timestr = sprintf("Mode %d", $blend); $f2->drawText($c, $col * $sw + 6, $row * $sh + 21, $timestr, 0x0); $f2->drawText($c, $col * $sw + 5, $row * $sh + 20, $timestr, 0xffffff); } $this->status = "Done"; $this->doProgress($max, $max, true); $c->save("composite.png"); return; }
public function __construct($filename) { // Load the image to analyze from disk $this->img = Canvas::createFromFile($filename); $this->log("Loaded canvas of [{$this->img->width}x{$this->img->height}] for analysis"); }