ShowImage.php
5.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
namespace common\behaviors;
use common\modules\file\components\UploaderComponent;
use yii;
use yii\base\Behavior;
use yii\imagine\Image;
class ShowImage extends Behavior
{
/**
* Resize image and return its path.
*
* @param string $dir Original image path
* @param integer|string $width New image width
* @param null|integer|string $height New image height, set NULL to save ratio
*
* @return string Resized image path
* @throws \Exception
*/
function minImg($dir, $width, $height = NULL)
{
if(empty( $dir )) {
return '/images/imageNotFound.jpg';
}
if($width == 'original') {
$preg = '/\/(.[^\/]*)$/';
preg_match('/\.(.[^.]*)$/', $dir, $type);
if(isset( $type[ 1 ] )) {
$dir = preg_replace($preg, '/original.' . $type[ 1 ], $dir);
}
} else {
$preg = '/\/(.[^\/]*)$/';
preg_match('/\.(.[^.]*)$/', $dir, $type);
if(isset( $type[ 1 ] )) {
$dir = preg_replace($preg, '/' . $width . 'x' . $height . '.' . $type[ 1 ], $dir);
$storage = dirname(yii\helpers\Url::to('@storage'));
$filename = $storage . $dir;
if(!file_exists($filename)) {
$original = $storage . dirname($dir) . '/original.' . $type[ 1 ];
$resizer = new UploaderComponent();
if(file_exists($original)) {
$resizer->resizeImg($width, $height, $original, $filename);
} else {
$imageNotFound = yii\helpers\Url::to('@storage') . "/imageNotFound" . $width . "x" . $height . ".jpg";
if(!file_exists($imageNotFound)) {
$resizer->resizeImg($width, $height, yii\helpers\Url::to('@storage') . "/imageNotFound.jpg", $imageNotFound);
}
return "/storage/imageNotFound" . $width . "x" . $height . ".jpg";
}
}
}
}
return $dir;
}
/**
* @param string $array String to split
*
* @return array Array of image paths
*/
function ShowGallery($array)
{
$gallery = explode(',', $array);
if(is_array($gallery)) {
array_splice($gallery, -1);
return $gallery;
} else {
return [];
}
}
public function ShowAvatar($dir, $width, $height = NULL)
{
if(empty( $dir )) {
return '/images/avatar-bg.png';
} else {
return $this->minImg($dir, $width, $height);
}
}
/**
* Add watermark to image
*
* @param string $path image path
*
* @return yii\base\Component
*/
public function watermark($path)
{
$watermark_path = Yii::getAlias('@webroot/images/watermark.png');
$image = Image::getImagine()
->open($path);
$watermark = Image::getImagine()
->open($watermark_path);
$image_size = $image->getSize();
$watermark_size = $watermark->getSize();
if($image_size->getWidth() < ($watermark_size->getWidth() + 20) || ($image_size->getHeight() + 20) < $watermark_size->getHeight()) {
return $this->owner;
}
$position_left = $image_size->getWidth() - ($watermark_size->getWidth() + 10);
Image::watermark($path, $watermark_path, [$position_left, 10])->save(preg_replace('/^(.*)(\.\w+)$/', '${1}_watermark${2}', $path));
return $this->owner;
}
function getWatermark($path, $width, $height = NULL)
{
if($width == 'original') {
$path_original = $this->minImg($path, 'original');
$path_watermark = str_replace('original', 'original_watermark', $path_original);
if(!file_exists(Yii::getAlias('@documentRoot').$path_watermark)) {
$this->watermark(Yii::getAlias('@documentRoot').$path_original);
}
return $path_watermark;
} else {
$path_original = $this->minImg($path, $width, $height);
preg_match('/^.*(\.\w+)$/', $path_original, $extension);
$path_watermark = $path_original;
if(isset($extension[1])) {
$path_watermark = str_replace($extension[1], '_watermark'.$extension[1], $path_original);
}
if(!file_exists(Yii::getAlias('@documentRoot').$path_watermark)) {
$this->watermark(Yii::getAlias('@documentRoot').$path_original);
}
return $path_watermark;
}
}
}