82 lines
2.6 KiB
PHP
82 lines
2.6 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)
|
|
{
|
|
try {
|
|
$final_image = new \Imagick();
|
|
$final_image->setColorspace(\Imagick::COLORSPACE_RGB);
|
|
$final_image->newImage($this->config->get('assembler.sizex'), $this->config->get('assembler.sizey'), 'none');
|
|
$final_image = $this->prepareImage($final_image);
|
|
|
|
$final_image->writeImage($file);
|
|
} catch (\ImagickException $e) {
|
|
echo $e->getMessage();
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function display()
|
|
{
|
|
try {
|
|
$final_image = new \Imagick();
|
|
$final_image->setColorspace(\Imagick::COLORSPACE_RGB);
|
|
$final_image->newImage($this->config->get('assembler.sizex'), $this->config->get('assembler.sizey'), 'none');
|
|
$final_image = $this->prepareImage($final_image);
|
|
|
|
header('Content-type: image/jpeg');
|
|
echo $final_image;
|
|
} catch (\ImagickException $e) {
|
|
echo $e->getMessage();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param \Imagick $final_image
|
|
*
|
|
* @return \Imagick
|
|
* @throws \ImagickException
|
|
*/
|
|
private function prepareImage(\Imagick $final_image)
|
|
{
|
|
$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++) {
|
|
$file = $this->pool->getImage();
|
|
$this->files[] = $file;
|
|
$image = new \Imagick($file);
|
|
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);
|
|
}
|
|
|
|
return $final_image;
|
|
}
|
|
}
|