journal-intime/app/Services/ImageService.php

57 lines
1.5 KiB
PHP

<?php
namespace App\Services;
use Illuminate\Support\Facades\Auth;
use Intervention\Image\Constraint;
use Intervention\Image\Facades\Image;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ImageService
{
/**
* @param string $image path to image
* @param array $options option to make thumbnail
*
* @return \Intervention\Image\Image
*/
public function makeThumbnail($image, $options = [])
{
if (!is_readable($image)) {
throw new NotFoundHttpException();
}
$img = Image::make($image);
if (empty($options)) {
return $img;
}
$folder = dirname($img->basePath());
$file_name = basename($image);
$width = null;
if (array_key_exists('width', $options)) {
$width = $options['width'];
$file_name = sprintf('w%u-%s', $width, $file_name);
}
$height = null;
if (array_key_exists('$height', $options)) {
$height = $options['$height'];
$file_name = sprintf('h%u-%s', $height, $file_name);
}
$full_path = sprintf('%s/%s', $folder, $file_name);
if (!array_key_exists('force', $options) && is_readable($full_path)) {
return Image::make($full_path);
}
//http://image.intervention.io/getting_started/
$img->resize($width, $height, static function (Constraint $constraint) {
$constraint->aspectRatio();
})->save(sprintf('%s/%s', $folder, $file_name));
return $img;
}
}