Уменьшить размер аватаров пользователей?- создание миниатюр
-
18-09-2019 - |
Вопрос
Пользователь моего сайта загружает изображения, которые используются в качестве аватаров.Я установил ограничение размера загрузки в 2 МБ.В большинстве мест мне нужны только миниатюры.Но пользователи загружают изображения с гораздо большим разрешением.Я храню эти файлы в своей файловой системе.
Как я могу создавать миниатюры и хранить их вместо файлов большого размера?
Решение
В зависимости от вашей установки/настройки сервера у вас есть несколько возможностей.
- Вы можете использовать библиотека ГД, и что-то вроде этого
imagecopyresized
функция - Или вы можете использовать
Imagick extension
, и что-то вроде этогоthumbnailImage
метод.
Я бы сказал, что я никогда не видел сервера без установленного GD - для Imagick вероятность его установки по умолчанию меньше :-(
Другим решением может быть вызов конвертировать утилита командной строки (он поставляется с ImageMagick - независимо от любого расширения PHP), используя что-то вроде exec
чтобы позвонить ему.
Преимущество при этом будет заключаться в том, что вы не будете ограничены memory_limit
, поскольку изменение размера будет выполняться внешним инструментом - но, конечно, это также означает, что ваше приложение будет полагаться на внешний инструмент, что не всегда приятно...
При необходимости есть масса туториалов по GD;например, это может вас заинтересовать:
- Как создавать миниатюры с помощью PHP и gd :он использует пакетный процесс для создания миниатюр для многих изображений, что может быть полезно, если вам нужно создать миниатюры для всех изображений, которые у вас уже есть.
- Создание миниатюр с помощью руководства по PHP :делает некоторые вещи, которые редко встречаются, например, создает квадратные миниатюры, центрируя исходное изображение и добавляя цвет фона.
Другие советы
Вы можете использовать модуль GD или Модуль ImageMagick для изменения размера и сжатия любых загруженных изображений.
Если вы поищете в Google что-то вроде «Изменение размера изображений PHP», вы найдете множество примеров.Я предпочитаю использовать GD, так как у меня есть старый код, который отлично работает.Предполагается, что у вас есть известное загруженное изображение в формате JPEG, найденное по адресу $srcImgPath
, вы можете сделать что-то вроде следующего, где $newWidth
и $newHeight
какие новые размеры изображения вам нужны:
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
Функционализируйте соответствующим образом и обязательно укажите $quality
.Вы также можете очень легко абстрагировать этот код для обработки изображений gif и png.
Проверьте библиотеку gd, в частности функция копирования изображения
Небольшое замечание: если вы пойдете по пути GD, используйте imagecopyresampled, поскольку он создает более чистые изображения.Под этим я имею в виду, что оно не будет выглядеть зернистым и/или пиксельным.
Ссылка на руководство PHP по функции: http://us2.php.net/manual/en/function.imagecopyresampled.php
Я бы порекомендовал скрипт timthumb.php.он твердый как скала.http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/
Если в вашей настройке PHP установлен Imagick.Тогда есть функция, которая это делает. Imagick::thumbnailImage()
Если у вас нет Imagick, то вам пригодится библиотека GD.Поскольку у них есть размер изображения ()
Разве Google AppEngine не оснащен подмножеством PIL?Существует функция изменения размера, которую можно использовать...и, что самое приятное, вы получаете бесплатную квоту!