01799a55
Yarik
first commit
|
1
2
|
<?php
|
d0c66642
Yarik
Namespaces
|
3
|
namespace artweb\artbox\components\artboximage;
|
01799a55
Yarik
first commit
|
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
use Yii;
use yii\base\Object;
use yii\helpers\Html;
class ArtboxImageHelper extends Object
{
/**
* @var ArtboxImage $imageDriver
*/
private static $imageDriver;
/**
* @var array $presets
*/
private static $presets;
/**
* Get image manipulation driver
*
|
d0c66642
Yarik
Namespaces
|
25
|
* @return \artweb\artbox\components\artboximage\ArtboxImage
|
01799a55
Yarik
first commit
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
*/
public static function getDriver()
{
if (empty( self::$imageDriver )) {
self::$imageDriver = Yii::$app->get('artboximage');
}
return self::$imageDriver;
}
/**
* Get named preset from driver preset list.
*
* @param string $preset
*
* @return array|null
*/
public static function getPreset($preset)
{
if (empty( self::$presets )) {
self::$presets = self::getDriver()->presets;
}
return empty( self::$presets[ $preset ] ) ? null : self::$presets[ $preset ];
}
|
8e5f1983
Yarik
Image helper improve
|
49
|
|
01799a55
Yarik
first commit
|
50
51
52
53
54
55
|
/**
* Get image HTML for image
*
* @param string $file
* @param array|string $preset
* @param array $imgOptions
|
8e5f1983
Yarik
Image helper improve
|
56
|
* @param int $quality
|
01799a55
Yarik
first commit
|
57
|
*
|
01799a55
Yarik
first commit
|
58
|
* @return string
|
8e5f1983
Yarik
Image helper improve
|
59
|
* @see Html::img()
|
01799a55
Yarik
first commit
|
60
|
*/
|
8e5f1983
Yarik
Image helper improve
|
61
|
public static function getImage($file, $preset, $imgOptions = [], $quality = 75)
|
01799a55
Yarik
first commit
|
62
63
|
{
$preset_alias = is_array($preset) ? array_keys($preset)[ 0 ] : null;
|
8e5f1983
Yarik
Image helper improve
|
64
|
return Html::img(self::getImageSrc($file, $preset, $preset_alias, $quality), $imgOptions);
|
01799a55
Yarik
first commit
|
65
|
}
|
8e5f1983
Yarik
Image helper improve
|
66
|
|
01799a55
Yarik
first commit
|
67
68
69
70
71
72
|
/**
* Get src for image
*
* @param string $file
* @param string $preset
* @param null|string $preset_alias
|
8e5f1983
Yarik
Image helper improve
|
73
|
* @param int $quality
|
01799a55
Yarik
first commit
|
74
75
76
|
*
* @return bool|string
*/
|
8e5f1983
Yarik
Image helper improve
|
77
|
public static function getImageSrc($file, $preset, $preset_alias = null, $quality = 75)
|
01799a55
Yarik
first commit
|
78
79
80
81
82
83
84
85
|
{
if (is_string($preset)) {
$preset_alias = $preset;
$preset = self::getPreset($preset);
}
if (empty( $preset ) || empty( $preset_alias )) {
return $file;
}
|
01799a55
Yarik
first commit
|
86
87
88
89
90
91
92
93
94
|
$filePath = self::getPathFromUrl($file);
if (!file_exists($filePath) || !preg_match(
'#^(.*)\.(' . self::getExtensionsRegexp() . ')$#',
$file,
$matches
)
) {
return $file;
}
|
8e5f1983
Yarik
Image helper improve
|
95
|
return self::getPresetUrl($filePath, $preset, $preset_alias, $quality);
|
01799a55
Yarik
first commit
|
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
|
}
/**
* Replace web path with file path
*
* @param string $url
*
* @return string
*/
private static function getPathFromUrl($url)
{
return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl));
}
/**
* Replace file path with web path
*
* @param string $path
*
* @return string
*/
private static function getUrlFromPath($path)
{
return substr_replace($path, self::getDriver()->rootUrl, 0, strlen(self::getDriver()->rootPath));
}
|
8e5f1983
Yarik
Image helper improve
|
121
|
|
01799a55
Yarik
first commit
|
122
123
124
125
126
127
|
/**
* Get formatted file url or create it if not exist
*
* @param string $filePath
* @param array $preset
* @param string $preset_alias
|
8e5f1983
Yarik
Image helper improve
|
128
|
* @param int $quality
|
01799a55
Yarik
first commit
|
129
130
131
|
*
* @return bool|string
*/
|
8e5f1983
Yarik
Image helper improve
|
132
|
private static function getPresetUrl($filePath, $preset, $preset_alias, $quality = 75)
|
01799a55
Yarik
first commit
|
133
134
135
136
137
138
139
140
141
142
143
|
{
$pathinfo = pathinfo($filePath);
$presetPath = $pathinfo[ 'dirname' ] . '/styles/' . strtolower($preset_alias);
$presetFilePath = $presetPath . '/' . $pathinfo[ 'basename' ];
$presetUrl = self::getUrlFromPath($presetFilePath);
if (file_exists($presetFilePath)) {
return $presetUrl;
}
if (!file_exists($presetPath)) {
@mkdir($presetPath, 0777, true);
}
|
8e5f1983
Yarik
Image helper improve
|
144
|
$output = self::createPresetImage($filePath, $preset, $preset_alias, $quality);
|
01799a55
Yarik
first commit
|
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
if (!empty( $output )) {
$f = fopen($presetFilePath, 'w');
fwrite($f, $output);
fclose($f);
return $presetUrl;
}
return false;
}
/**
* Create formatted image.
* Available manipulations:
* * resize
* * flip
*
|
8e5f1983
Yarik
Image helper improve
|
160
161
162
163
|
* @param string $filePath
* @param array $preset
* @param string $preset_alias
* @param integer $quality
|
01799a55
Yarik
first commit
|
164
165
166
|
*
* @return string
*/
|
8e5f1983
Yarik
Image helper improve
|
167
|
private static function createPresetImage($filePath, $preset, $preset_alias, $quality = 75)
|
01799a55
Yarik
first commit
|
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
{
$image = self::getDriver()
->load($filePath);
foreach ($preset as $action => $data) {
switch ($action) {
case 'resize':
$width = empty( $data[ 'width' ] ) ? null : $data[ 'width' ];
$height = empty( $data[ 'height' ] ) ? null : $data[ 'height' ];
$master = empty( $data[ 'master' ] ) ? null : $data[ 'master' ];
$image->resize($width, $height, $master);
break;
case 'flip':
$image->flip(@$data[ 'direction' ]);
break;
default:
break;
}
}
|
84c5618b
Yarik
Image test
|
186
|
return $image->render(null, 30);
|
01799a55
Yarik
first commit
|
187
188
189
190
191
192
193
194
195
196
197
198
199
|
}
/**
* Get extensions regexp
*
* @return string regexp
*/
private static function getExtensionsRegexp()
{
$keys = array_keys(self::getDriver()->extensions);
return '(?i)' . join('|', $keys);
}
}
|