Exemple #1
0
 protected function generate($size)
 {
     $size = $original_size = (string) $size;
     if (empty($size)) {
         return false;
     }
     $size_num = (int) $size;
     if (!is_numeric($size_num) || $size_num <= 0 || $size_num > Resizer::MAX_DIMENSION) {
         return false;
     }
     $better_size = $this->moreRelevantSize($size);
     if (false !== $better_size) {
         return $this->path($better_size);
     }
     switch (true) {
         case $size[strlen($size) - 1] == 's':
             $width = $height = $size_num;
             $mode = Resizer::SCALE_CROP;
             $size = $size_num . 's';
             break;
         case $size[strlen($size) - 1] == 'w':
             $width = $size_num;
             $height = null;
             $mode = Resizer::SCALE_LANDSCAPE;
             $size = $size_num . 'w';
             break;
         case $size[strlen($size) - 1] == 'h':
             $width = null;
             $height = $size_num;
             $mode = Resizer::SCALE_PORTRAIT;
             $size = $size_num . 'h';
             break;
         default:
             $width = $height = $size_num;
             $mode = Resizer::SCALE_AUTO;
             $size = $size_num . '';
             break;
     }
     if ($size !== $original_size) {
         return false;
     }
     $fullsize_stream = Storage::get($this->pathFromSize());
     if (!$fullsize_stream) {
         return false;
     }
     $temp_file = tempnam(sys_get_temp_dir(), 'laravel-image');
     File::put($temp_file, $fullsize_stream);
     if (!File::exists($temp_file)) {
         return false;
     }
     try {
         $resizer = new Resizer($temp_file);
         $resizer->resize($width, $height, $mode);
         if (!$resizer->save($temp_file, null, Config::get('laravel-image::image_resize_quality', 100))) {
             throw Exception('Error resizing file.');
         }
         $stream = File::get($temp_file);
         if (!$stream) {
             throw Exception('Error retrieving file.');
         }
     } catch (Exception $e) {
         File::delete($temp_file);
         return false;
     }
     $new_path = $this->pathFromSize($size);
     Storage::put($new_path, $stream);
     File::delete($temp_file);
     $sizes = $this->sizes;
     $sizes[$size] = Storage::url($new_path);
     $this->sizes = $sizes;
     $this->save();
     return $new_path;
 }