Как оптимизировать изображения в PHP? - PullRequest
3 голосов
/ 13 июля 2011

У меня есть веб-сайт, где пользователи могут сохранять свое изображение профиля (аватар).

Я бы хотел оптимизировать изображение при загрузке.

Я имею в виду,Это изображение аватара, не нуждающееся в полном разрешении или большом размере.

Что я могу сделать?Я думал:

  • Изменить его размер
  • Низкое качество

Возможно:

  • преобразовать его в GIF
  • Цветная заливка в прозрачные PNG

Есть ли какая-нибудь библиотека лучше (проще), чем GD, чтобы сделать это?

Большое спасибо!

Ответы [ 4 ]

2 голосов
/ 13 июля 2011

Б-г, как это делается.Это звучит как простая операция, но есть ряд факторов, которые вы действительно хотите исправить, если собираетесь это сделать.В итоге получается несколько сотен строк кода, чтобы позаботиться обо всем.

Я рекомендую, хотя, возможно, вы захотите изменить размер изображения (которое требует повторного сжатия с потерями при использовании JPEG), преобразовав егов GIF это плохая идея.Вы не знаете, какой тип источника, поэтому делать это проблематично.

Вот мой рекомендуемый поток:

1) Измените размер изображения в выходной формат.Здесь вы также можете принудительно установить соотношение сторон обрезки, если хотите.

2) Определить режим исходного источника:

  • 8-битный индекс (GIF / PNG8): Сохранить как PNG8 (формат, как правило, меньше, чем GIF).
  • 16-24 бит: Сохранить как JPG.Качество зависит от вас, но 70% - это хорошая базовая линия.
  • 32 бит (PNG24): сохраняйте как PNG24, заботясь о прозрачности.

Обратите внимание, это решениев значительной степени уничтожает любые «анимированные» GIF-файлы, но ... это то, что происходит, когда вы пытаетесь изменить размер анимированного GIF-файла.

Хотя ... Я также настоятельно рекомендую НЕ делать это как одностадийный процесс и удалятьоригинальные файлы.Это тот тип вещей, который вернется к вам позже.

В наши дни дисковое пространство дешевое ... гораздо лучше хранить оригиналы в высококачественном формате (даже с разрешением 2K x 2K)затем создайте сервис изображений, который будет обеспечивать необходимое разрешение / качество, и кешируйте результат.

1 голос
/ 13 июля 2011

Вы можете использовать библиотеку изображений Asido для PHP , чтобы изменить размер ваших изображений.Эта библиотека использует GD, хотя.Вот пример примера использования кода .

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

0 голосов
/ 07 января 2013
<p>
//This function will proportionally resize image 
function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
//Check Image size is not 0
if($CurWidth <= 0 || $CurHeight <= 0) 
{
return false;
}   
//Construct a proportional size of new image
$ImageScale         = min($MaxSize/$CurWidth, $MaxSize/$CurHeight); 
$NewWidth           = ceil($ImageScale*$CurWidth);
$NewHeight          = ceil($ImageScale*$CurHeight);
$NewCanves          = imagecreatetruecolor($NewWidth, $NewHeight);
// Resize Image
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
{
switch(strtolower($ImageType))
{
case 'image/png':
imagepng($NewCanves,$DestFolder);
break;
case 'image/gif':
imagegif($NewCanves,$DestFolder);
break;          
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($NewCanves,$DestFolder,$Quality);
break;
default:
return false;
}
//Destroy image, frees memory   
if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
return true;
}
}
</p>
0 голосов
/ 13 июля 2011

Я бы выбрал некоторые стандартные размеры аватара, которые вам понадобятся для вашей страницы, например

  • средний размер страницы профиля, если она у вас есть и
  • маленький размер, который появляется рядом с постом пользователя
  • вы поняли, что вам нужно

И когда пользователь загружает новый аватар, вы конвертируете его в нужные вам форматы с приемлемыми настройками качества. Я предполагаю, что вы собираетесь использовать JPEG, потому что это хороший универсальный формат для этого варианта использования. PNG плохо справляются с фотографическим контентом, JPEG не так хороши для рисунков, но большинство аватаров, которые вы видите, - это фотографии. Я бы больше не использовал GIF-файлы, они ограничены 256 цветами и имеют только 1-битный альфа-канал.

...