Уменьшить размер аватаров пользователей?- создание миниатюр

StackOverflow https://stackoverflow.com/questions/1483687

Вопрос

Пользователь моего сайта загружает изображения, которые используются в качестве аватаров.Я установил ограничение размера загрузки в 2 МБ.В большинстве мест мне нужны только миниатюры.Но пользователи загружают изображения с гораздо большим разрешением.Я храню эти файлы в своей файловой системе.

Как я могу создавать миниатюры и хранить их вместо файлов большого размера?

Это было полезно?

Решение

В зависимости от вашей установки/настройки сервера у вас есть несколько возможностей.

Я бы сказал, что я никогда не видел сервера без установленного GD - для Imagick вероятность его установки по умолчанию меньше :-(


Другим решением может быть вызов конвертировать утилита командной строки (он поставляется с ImageMagick - независимо от любого расширения PHP), используя что-то вроде exec чтобы позвонить ему.

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


При необходимости есть масса туториалов по GD;например, это может вас заинтересовать:

Другие советы

Вы можете использовать модуль 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?Существует функция изменения размера, которую можно использовать...и, что самое приятное, вы получаете бесплатную квоту!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top