2017-02-23 500 views
0

Я делаю сайт галереи изображений, где пользователи могут загружать любое изображение, и они будут отображаться на интерфейсе. Мне нужно сжать изображения, не влияя на качество, чтобы уменьшить размер, чтобы скорость загрузки страницы не так сильно влияла. Я использую следующий код для загрузки изображения:Как сжать изображение перед загрузкой в ​​Laravel?

$rules = array('file' => 'required'); 
$destinationPath = 'assets/images/pages' 
$validator = Validator::make(array('file' => $file), $rules); 
if ($validator->passes()) { 
    $filename = time() . $uploadcount . '.' . $file->getClientOriginalExtension(); 
    $file->move($destinationPath, $filename); 
    return $filename; 
} else { 
    return ''; 
} 
+0

Я думаю, что большинство веб-серверов и веб-браузером поддержка gzipping контента из коробки, так что вы не должны действительно нужно сделать что угодно для сжатия без потерь. Конечно, это влияет только на направление сервера> клиент. – apokryfos

+0

@apokryfos Я включил gzipping, используя htaccess и прочтение страницы, также сообщите мне, что сжатие включено, но все же это дает мне ошибку для уменьшения размера изображения, а скорость моей страницы - всего лишь 20-28. –

+0

Вы можете изменить размер изображения с помощью вмешательства изображения и сохранить как измененную, так и оригинальную версию. версия с измененной версией должна иметь размеры, которые вы покажете им позже, - поэтому вы не увидите потери качества. Если вам все еще требуются оригиналы, вы также будете иметь их на месте таким образом –

ответ

1

Вы должны оптимизировать изображения для веб-использования в качестве пользователя может загружать изображения, которые являются способом большим (либо по размеру или разрешения). Вы также можете удалить метаданные из изображений, чтобы еще больше уменьшить размер. Intervention Image идеально подходит для изменения размера/оптимизации изображений для веб-использования в Laravel. Вам необходимо оптимизировать изображение до его сохранения, чтобы оптимизированная версия использовалась при загрузке веб-страницы.

Intervention Image

+0

Я попытался интегрировать его в Laravel, но выполнил следующую команду композитора, но он дает ошибку: php composer.phar требует вмешательства/изображения Не удалось открыть входной файл: композитор. phar: php composer.phar требуется вмешательство/изображение –

+0

Выполняете ли вы команду в своем каталоге проектов laravel? – TedRed

+0

да. После этого я следил за этим блогом, и теперь композитор успешно обновился. http://devartisans.com/articles/resize-images-laravel5.1 Я хочу знать, должен ли я запускать следующую команду artisan: php artisan vendor: publish --provider = "Intervention \ Image \ ImageServiceProviderLaravel5" –

0

https://tinypng.com предоставляет услугу API для сжатия изображений. Все, что вам нужно сделать, это установить свою библиотеку PHP в Laravel, получить ключ разработчика с их сайта. После этого, добавив нижеприведенный код, вы можете сжать загруженное изображение. В коде я предполагаю, что вы сохранили свой файл в каталоге «storage».

$filepath = public_path('storage/profile_images/'.$filename); 
\Tinify\setKey("YOUR_API_KEY"); 
$source = \Tinify\fromFile($filepath); 
$source->toFile($filepath); 

Вот ссылка на блог, который объясняет, как загружать и сжимать изображения в Laravel http://artisansweb.net/guide-upload-compress-images-laravel

+0

Пожалуйста, предоставьте код с компрессией. – timiTao

+0

Сначала установите библиотеку, выполнив команду «composer require tinify/tinify» в вашем проекте Laravel. И затем попробуйте приведенный выше код. –