Resize images

programmer_2006

Новичок
Resize images

Столкнулся с такой проблемой...
Делаю галлерею и надо ресайзить картинки.
Нашел пару библиотек: asido и ezComponents
1. Asido - написана под пхп 4 выдает на пхп 5 много предупреждений. Волнуюсь,что с выходом пхп 6, проект ляжет. Но довольно легкая библиотека, пример заработал сходу.
2. ezComponents - компонент этой библиотеки по работе с картинками довольно наварочен. Но проблема в том, что он у меня не стартанул. Вместо уменьшеной копии создает файлы вида .im262.tmp. Хотя код копировал с примеров.

Может есть еще какие варианты? Пару классов, что бы просто,красиво и функционально под пхп 5.

Заранее благодарен за помощь.
 

Фанат

oncle terrible
Команда форума
вопрос офигительный.
"нужно умножать 2 на 2. нашел две библиотеки".

искать "библиотеку" для кода в 5 строчек - это сила.
 

KolyaA

Новичок
Пользовался php thumbnailer http://phpthumb.gxdlabs.com/. Это просто класс, который позволяет менять размер и т.п.

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

Вот ищу что-нибудь, что делало бы подобные простые вещи, не занимая много памяти.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Тут важны не мегабайты, а физ размер изображения.
1. Експерементальным путем найди оптимальный размер, делай проверку, не давай загружать фото больших размеров.
2. Ресайз делай в несколько этапов. а) с неприлично большого до большого с низким качесвом. б) с большого до нужного с высоким.
 

KolyaA

Новичок
Тут важны не мегабайты, а физ размер изображения.
1. Експерементальным путем найди оптимальный размер, делай проверку, не давай загружать фото больших размеров.
2. Ресайз делай в несколько этапов. а) с неприлично большого до большого с низким качесвом. б) с большого до нужного с высоким.
Спасибо. Попробую второе. А как думаешь, поиски другого ресайзера что-нибудь дадут? Подозрения, что они все устроены примерно одинаково, лишь разный интерфейс.
 

KolyaA

Новичок
В общем, дело оказалось в том что в GD есть функции (imagecreatefromjpeg например), которые при нехватке памяти сразу валятся.

Пришлось переписать создание предвидов с помощью функций imagemagick. Оказалось, что при неограниченном доступе к памяти они жрут в 3 раза больше памяти. Но зато у них нет такой неприятной особенности, и при нехватке памяти они все равно работают.
 

Dovg

Продвинутый новичок
KolyaA есть еще консольный imagemagick: convert. fyi
 

alexzolotuhin

Новичок
Может пригодиться... работает по тупому, но работает:
PHP:
//$img = 'Z:\\home\\sait.ru\\beauty\\IMGS\\' . $newname;// адрес ....

img_resize($img, $img, 400, 400);

function img_resize($src, $dest, $width, $height, $rgb = 0x000000, $quality = 100){
	if (!file_exists($src)){
		return false;
	}

	$size = getimagesize($src);

	if ($size === false){
		return false;
	}

	$format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
	$icfunc = 'imagecreatefrom'.$format;

	if (!function_exists($icfunc)){
		return false;
	}

	$x_ratio = $width/ $size[0];
	$y_ratio = $height / $size[1];

	if ($height == 0){
		$y_ratio = $x_ratio;
		$height= $y_ratio * $size[1];
	} elseif ($width == 0){
		$x_ratio = $y_ratio;
		$width = $x_ratio * $size[0];
	}

	$ratio	 = min($x_ratio, $y_ratio);
	$use_x_ratio = ($x_ratio == $ratio);

	$new_width = $use_x_ratio? $width: floor($size[0] * $ratio);
	$new_height= !$use_x_ratio ? $height : floor($size[1] * $ratio);
	$new_left	= $use_x_ratio? 0 : floor(($width - $new_width) / 2);
	$new_top	 = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

	$isrc= $icfunc($src);
	$idest = imagecreatetruecolor($width, $height);

	imagefill($idest, 0, 0, $rgb);
	imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

	imagejpeg($idest, $dest, $quality);

	imagedestroy($isrc);
	imagedestroy($idest);

	return true;
}
 
Сверху