zend-blog-3-backend
51 строка · 1.3 Кб
1<?php
2
3namespace App\Model\Resizer;
4
5use App\Model\ResizerInterface;
6use Imagick;
7use ImagickException;
8use Symfony\Component\Process\Exception\ProcessFailedException;
9use Symfony\Component\Process\Process;
10
11class PngResizer implements ResizerInterface
12{
13use DebugAnnotation;
14
15/**
16* @throws ImagickException
17* @throws ProcessFailedException
18*/
19public function resize(string $filePath, string $newFilePath, int $width, int $height)
20{
21$image = new Imagick($filePath);
22$image->stripImage();
23
24$image->scaleImage($width, $height);
25
26$image->setFormat($this->getFormat());
27$image->setImageFormat($this->getFormat());
28
29$image->setCompression(Imagick::COMPRESSION_ZIP);
30$image->setImageCompression(Imagick::COMPRESSION_ZIP);
31
32//$this->annotate($width, $height, $image);
33
34$image->writeImage($newFilePath);
35$image->clear();
36
37$process = new Process(
38'/usr/bin/pngquant -s1 --quality=60-80 --ext .png -f ' . escapeshellarg($newFilePath)
39);
40$process->run();
41
42if (!$process->isSuccessful()) {
43throw new ProcessFailedException($process);
44}
45}
46
47protected function getFormat(): string
48{
49return 'png';
50}
51}
52