Сжатие изображений (PHP)
Пишу скрипт сжатия изображений, чтобы посетители сайта могли загружать в качестве аватара любое изображение. Использую функцию imagecopymerge. В принципе всё работает, но иногда возникают проблемы с некоторыми *.PNG.
Есть подозрение, что библиотека GD обрабатывает не все форматы PNG... |
С какими именно PNG? С полупрозрачностью?
Какой функцией получаете ресурс? imagecreatefrompng? |
Вот, убрал всё лишнее, оставил код только для PNG. In the end должна получаться уменьшенная копия шириной в 90px. Пропорциональное изменение высоты нужно для не квадратных аватаров. При отображении на странице ширина задаётся жёстко (90px) а высота в диапазоне от min-height до max-height (для браузеров "понимающих" эти свойства).
// Если размер файла больше 15 КБ
if ( $_FILES['file']['size'] > 15000 )
{
// Открытие переданного изображения
$src = imagecreatefrompng($newFileName);
// Получение размера загруженного изображения
$imgInfo = getimagesize($newFileName);
// Масштабный коэффициент
$scale = 90/$imgInfo[0];
// Новая высота
$newheight = $imgInfo[1]*$scale;
settype($newheight, "integer");
// Создание нового изображения
$dest = imagecreatetruecolor(90, $newheight);
// Копирование изображения
imagecopyresampled($dest, $src, 0, 0, 0, 0, 90, $newheight, $imgInfo[0], $imgInfo[1]);
// Запись изображения в файл
imagepng($dest, $newFileName, 100);
// Освобождение памяти
imagedestroy($dest);
imagedestroy($src);
}
Проблемы возникают только с PNG имеющими прозрачность. |
Цитата:
quality Compression level: from 0 (no compression) to 9. |
не понимаю, зачем поднимать темы чуть ли не трех летней давности.
|
Цитата:
|
=)
|
Цитата:
Tim, Не мучай GD и пользователей, пусть грузят что хотят в размер. |
Gozar,
Я уже сейчас тоже так думаю, всё равно все на безлимитке сидят Цитата:
|
не "сжимать", а "делать ресамплинг/давнсамплинг"
|
Цитата:
|
хех, старая тема, но http://www.cyberforum.ru/php-beginne...ead239820.html
вероятно дело в том, что для схожей функции imagejpeg в мануале написано: Цитата:
|
| Часовой пояс GMT +3, время: 21:03. |