1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Created by PhpStorm. |
4
|
|
|
* User: floor12 |
5
|
|
|
* Date: 08.07.2018 |
6
|
|
|
* Time: 18:41 |
7
|
|
|
*/ |
8
|
|
|
|
9
|
|
|
namespace floor12\files\logic; |
10
|
|
|
|
11
|
|
|
use floor12\files\components\SimpleImage; |
12
|
|
|
use floor12\files\models\File; |
13
|
|
|
use floor12\files\models\FileType; |
14
|
|
|
use yii\base\ErrorException; |
15
|
|
|
|
16
|
|
|
class FileResize |
17
|
|
|
{ |
18
|
|
|
private $_file; |
19
|
|
|
private $_maxWidth; |
20
|
|
|
private $_maxHeight; |
21
|
|
|
private $_compression; |
22
|
|
|
private $_imageType = IMAGETYPE_JPEG; |
23
|
|
|
|
24
|
|
|
/** |
25
|
|
|
* FileResize constructor. |
26
|
|
|
* @param File $file Модель файла |
27
|
|
|
* @param int $maxWidth максимальная ширина |
28
|
|
|
* @param int $maxHeight максимальная высота |
29
|
|
|
* @param int $compression качество jpeg |
30
|
|
|
* @throws ErrorException |
31
|
|
|
*/ |
32
|
|
|
public function __construct(File $file, int $maxWidth, int $maxHeight, $compression = 60) |
33
|
|
|
{ |
34
|
|
|
$this->_file = $file; |
35
|
|
|
|
36
|
|
|
if ($this->_file->type != FileType::IMAGE) |
37
|
|
|
throw new ErrorException('This file is not an image.'); |
38
|
|
|
|
39
|
|
|
if (!file_exists($this->_file->rootPath)) |
40
|
|
|
throw new ErrorException('File not found on disk'); |
41
|
|
|
|
42
|
|
|
$this->_maxHeight = $maxHeight; |
43
|
|
|
$this->_maxWidth = $maxWidth; |
44
|
|
|
$this->_compression = $compression; |
45
|
|
|
|
46
|
|
|
} |
47
|
|
|
|
48
|
|
|
|
49
|
|
|
/** Непосредственная обработка |
50
|
|
|
* @return bool |
51
|
|
|
* @throws ErrorException |
52
|
|
|
*/ |
53
|
|
|
public function execute(): bool |
54
|
|
|
{ |
55
|
|
|
if ($this->_file->content_type == 'image/svg+xml') |
56
|
|
|
return true; |
57
|
|
|
|
58
|
|
|
$image = new SimpleImage(); |
59
|
|
|
$image->load($this->_file->rootPath); |
60
|
|
|
|
61
|
|
|
if ($image->getWidth() > $this->_maxWidth || $image->getHeight() > $this->_maxHeight) { |
62
|
|
|
$image->resizeToWidth($this->_maxWidth); |
63
|
|
|
if ($this->_file->content_type == 'image/png') |
64
|
|
|
$this->_imageType = IMAGETYPE_PNG; |
65
|
|
|
$image->save($this->_file->rootPath, $this->_imageType, $this->_compression); |
66
|
|
|
$this->_file->size = filesize($this->_file->rootPath); |
67
|
|
|
return $this->_file->save(false, ['size']); |
68
|
|
|
} |
69
|
|
|
return true; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
} |
73
|
|
|
|