2009-09-27 6 views
1

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

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

ответ

3

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

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


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

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


При необходимости, есть много учебников о GD; например, те могут вас заинтересовать:

  • How to create thumbnails with PHP and gd: он использует пакетный процесс для создания эскизов для многих изображений - что может быть полезно, если вы должны создавать эскизы для всех изображений, которые у вас уже есть
  • Thumbnail generation with PHP tutorial : делает некоторые вещи, которые часто не видны, например, создавать квадратные миниатюры, центрируя изображение orignal и добавляя некоторый цвет фона.
0

Если у вас установлен Imagick в настройках PHP. Тогда есть функция, которая делает это. Imagick::thumbnailImage()

Если у вас нет Imagick, тогда библиотека GD пригодится. Поскольку у них есть imagcopyresized()

3

Вы можете использовать GD moduleImageMagick module или изменить размер и уменьшить любые загруженные изображения.

Если вы используете Google для чего-то вроде «PHP-resizer изображений», вы найдете множество примеров. Я имею тенденцию использовать 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 очень легко.

0

Разве Google AppEngine не имеет подмножества PIL? Существует функция «resize», которая может быть использована ... и, самое главное, вы получаете бесплатную квоту!

+1

Но я не использую Google AppEngine. –

+0

Это было всего лишь предложение ... бесплатные циклы всегда круты, нет? – jldupont

1

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

Ссылка на PHP руководство по функции: http://us2.php.net/manual/en/function.imagecopyresampled.php

1

Я бы порекомендовал сценарий timthumb.php. он твердый. http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/

+0

В нем содержится серьезный недостаток безопасности http://markmaunder.com/2011/08/01/zero-day-vulnerability-in-many-wordpress-themes/, хотя при этом убедитесь, что вы получили самую последнюю из http: // code.google.com/p/timthumb/ – Kurt