/** * Create thumbnails and upload to cloud storage. * * @param strin $dir * @param UploadImage $image * @param Stock\Image $model * * @return boolean */ protected static function createThumbnailsAndUpload($dir, $image, $model) { // Get extension $extensionRaw = strtolower(substr(strrchr($model->filename, '.'), 1)); switch ($extensionRaw) { case 'jpeg': case 'jpg': $extension = 'jpg'; break; case 'png': $extension = 'png'; break; default: $extension = 'unknown'; Log::warning("Unknown extension: {$extensionRaw}!"); } $originalFilename = $dir . 'original.' . $extension; Log::debug("Creating original image file {$originalFilename} #{$model->id}"); $image->save($originalFilename); // Create thumbnail for each format foreach (Image::$formats as $name => $options) { Log::debug("Scale image for format {$name} #{$model->id}"); if ($options['width'] === null || $options['height'] === null) { $image->resize($options['width'], $options['height'], function ($constraint) { $constraint->aspectRatio(); }); } else { $image->fit($options['width'], $options['height']); } $filename = $dir . $name . '.' . $extension; $image->save($filename); // Upload resized image self::uploadToCloud($model, $filename, $name); // Restore state from $image->backup(); $image->reset(); @unlink($filename); } // Upload original self::uploadToCloud($model, $originalFilename, 'original'); @unlink($originalFilename); return true; }