WebCollage/src/Assembler/Mosaic.php

48 lines
1.7 KiB
PHP

<?php
namespace Shikiryu\WebGobbler\Assembler;
use Shikiryu\WebGobbler\Assembler;
class Mosaic extends Assembler
{
/**
* @param string $file
*
* @return void
* @throws \ImagickException
*/
public function saveTo($file)
{
$final_image = new \Imagick();
$final_image->setColorspace(\Imagick::COLORSPACE_RGB);
$final_image->newImage($this->config->get('assembler.sizex'), $this->config->get('assembler.sizey'), 'none');
$image_size_x = $this->config->get('assembler.sizex') / $this->config->get('assembler.nbx');
$image_size_y = $this->config->get('assembler.sizey') / $this->config->get('assembler.nby');
for ($y = 0; $y < $this->config->get('assembler.nby'); $y++) {
for ($x = 0; $x < $this->config->get('assembler.nbx'); $x++) {
$image = new \Imagick($this->pool->getImage());
if ($image->getColorspace() !== \Imagick::COLORSPACE_RGB) {
$image->setColorspace(\Imagick::COLORSPACE_RGB);
}
$image->scaleImage($image_size_x, $image_size_y, true);
$final_image->compositeImage($image, \Imagick::COMPOSITE_DEFAULT, $x * $image_size_x, $y * $image_size_y);
}
}
if (true === $this->config->get('assembler.mirror')) {
$final_image->flopImage();
}
if (true === $this->config->get('assembler.emboss')) {
$final_image->embossImage(0, 1);
}
if (true === $this->config->get('assembler.invert')) {
$final_image->negateImage(false);
}
$final_image->writeImage($file);
}
public function display()
{
// TODO: Implement display() method.
}
}