Blame view

common/components/artboximage/ArtboxImageHelper.php 5.35 KB
d8c1a2e0   Yarik   Big commit artbox
1
  <?php
9532b442   Yarik   "current" functio...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
      
      namespace common\components\artboximage;
      
      use Yii;
      use yii\base\Object;
      use yii\helpers\ArrayHelper;
      use yii\helpers\Html;
      
      class ArtboxImageHelper extends Object
      {
          
          /** @var  ArtboxImage $imageDriver */
          private static $imageDriver;
          
          private static $presets;
          
          public static function getDriver()
          {
              if(empty( self::$imageDriver )) {
                  self::$imageDriver = Yii::$app->artboximage;
              }
              return self::$imageDriver;
d8c1a2e0   Yarik   Big commit artbox
24
          }
9532b442   Yarik   "current" functio...
25
26
27
28
29
30
31
32
          
          public static function getPreset($preset)
          {
              
              if(empty( self::$presets )) {
                  self::$presets = self::getDriver()->presets;
              }
              return empty( self::$presets[ $preset ] ) ? NULL : self::$presets[ $preset ];
d8c1a2e0   Yarik   Big commit artbox
33
          }
9532b442   Yarik   "current" functio...
34
35
36
37
38
          
          public static function getImage($file, $preset, $imgOptions = [])
          {
              $preset_alias = is_array($preset) ? array_keys($preset)[ 0 ] : NULL;
              return Html::img(self::getImageSrc($file, $preset, $preset_alias), $imgOptions);
d8c1a2e0   Yarik   Big commit artbox
39
          }
9532b442   Yarik   "current" functio...
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
          
          public static function getImageSrc($file, $preset, $preset_alias = NULL)
          {
              if(is_string($preset)) {
                  $preset_alias = $preset;
                  $preset = self::getPreset($preset);
              }
              if(empty( $preset ) || empty( $preset_alias )) {
                  return $file;
              }
              
              $filePath = self::getPathFromUrl($file);
              if(!file_exists($filePath) || !preg_match('#^(.*)\.(' . self::getExtensionsRegexp() . ')$#', $file, $matches)) {
                  return $file;
              }
              return self::getPresetUrl($filePath, $preset, $preset_alias);
d8c1a2e0   Yarik   Big commit artbox
56
          }
9532b442   Yarik   "current" functio...
57
58
59
60
          
          public static function fileinputWidget($model, $modelField, $formField = 'fileUpload', $multiple = false)
          {
              return Yii::$app->artboximage->fileinputWidget($model, $modelField, $formField, $multiple);
d8c1a2e0   Yarik   Big commit artbox
61
          }
9532b442   Yarik   "current" functio...
62
63
64
65
          
          private static function getPathFromUrl($url)
          {
              return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl));
d8c1a2e0   Yarik   Big commit artbox
66
          }
9532b442   Yarik   "current" functio...
67
68
69
70
          
          private static function getUrlFromPath($path)
          {
              return substr_replace($path, self::getDriver()->rootUrl, 0, strlen(self::getDriver()->rootPath));
d8c1a2e0   Yarik   Big commit artbox
71
          }
9532b442   Yarik   "current" functio...
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
          
          private static function getPresetUrl($filePath, $preset, $preset_alias)
          {
              $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);
              }
              $output = self::createPresetImage($filePath, $preset, $preset_alias);
              if(!empty( $output )) {
                  $f = fopen($presetFilePath, 'w');
                  fwrite($f, $output);
                  fclose($f);
                  return $presetUrl;
              }
              return false;
d8c1a2e0   Yarik   Big commit artbox
93
          }
9532b442   Yarik   "current" functio...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
          
          private static function createPresetImage($filePath, $preset, $preset_alias)
          {
              $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;
                  }
d8c1a2e0   Yarik   Big commit artbox
113
              }
9532b442   Yarik   "current" functio...
114
              return $image->render();
d8c1a2e0   Yarik   Big commit artbox
115
          }
9532b442   Yarik   "current" functio...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
          
          /**
           * Get extensions regexp
           * @return string regexp
           */
          private static function getExtensionsRegexp()
          {
              $keys = array_keys(self::getDriver()->extensions);
              return '(?i)' . join('|', $keys);
          }
          
          /**
           * Get size from suffix
           *
           * @param string $suffix
           *
           * @return string size
           */
          private function getSizeFromSuffix($suffix)
          {
              return array_search($suffix, $this->getSizeSuffixes());
          }
          
          /**
           * Get suffix from size
           *
           * @param string $size
           *
           * @return string suffix
           */
          private function getSufixFromSize($size)
          {
              return ArrayHelper::getValue($this->getSizeSuffixes(), $size);
          }
          
          private function getSizeSuffixes()
          {
              $suffixes = [];
              foreach($this->sizes as $size => $sizeConf) {
                  $suffixes[ $size ] = ArrayHelper::getValue($this->sizeSuffixes, $size, $this->defaultSizeSuffix . $size);
              }
              return $suffixes;
d8c1a2e0   Yarik   Big commit artbox
158
          }
9532b442   Yarik   "current" functio...
159
      }