Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Сжатие изображений (PHP) (https://javascript.ru/forum/server/4742-szhatie-izobrazhenijj-php.html)

Tim 17.08.2009 23:38

Сжатие изображений (PHP)
 
Пишу скрипт сжатия изображений, чтобы посетители сайта могли загружать в качестве аватара любое изображение. Использую функцию imagecopymerge. В принципе всё работает, но иногда возникают проблемы с некоторыми *.PNG.

Есть подозрение, что библиотека GD обрабатывает не все форматы PNG...

Андрей Параничев 18.08.2009 00:27

С какими именно PNG? С полупрозрачностью?
Какой функцией получаете ресурс? imagecreatefrompng?

Tim 18.08.2009 12:57

Вот, убрал всё лишнее, оставил код только для 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 имеющими прозрачность.

Mister-Fil 13.01.2012 19:24

Цитата:

Сообщение от Tim (Сообщение 27375)
# Запись изображения в файл
imagepng($dest, $newFileName, 100);

bool imagepng ( resource $image [, string $filename [, int $quality [, int $filters ]]] )
quality
Compression level: from 0 (no compression) to 9.

devote 13.01.2012 19:29

не понимаю, зачем поднимать темы чуть ли не трех летней давности.

Mister-Fil 14.01.2012 09:57

Цитата:

Сообщение от devote (Сообщение 150226)
не понимаю, зачем поднимать темы чуть ли не трех летней давности.

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

Tim 14.01.2012 20:34

=)

Gozar 15.01.2012 00:19

Цитата:

Сообщение от Mister-Fil (Сообщение 150450)
считаю что многим будет полезно узнать в чем была ошибка и кому-то это пригодится

Надеюсь никто подобным страдать не будет и бедные пользователи смогут загружать анимированный гиф ;)

Tim,
Не мучай GD и пользователей, пусть грузят что хотят в размер.

Tim 15.01.2012 00:34

Gozar,
Я уже сейчас тоже так думаю, всё равно все на безлимитке сидят

Цитата:

Надеюсь никто подобным страдать не будет и бедные пользователи смогут загружать анимированный гиф
Важное замечание. Хотя для гифов можно сделать исключение или разваливать их на кадры, сжимать и склеивать обратно. На http://www.phpclasses.org кажется была библиотечка для работы с анимированными гифами.

elf2002 15.01.2012 05:10

не "сжимать", а "делать ресамплинг/давнсамплинг"


Часовой пояс GMT +3, время: 16:57.