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; }