Скрипт показа уменьшеных изображений
Хотелось бы поделиться своей доработкой одного из скриптов:
Скрипт для создания превьюшек изображений <? function thumb($path,$x=0,$y=0,$f=0) { if($x == 0 and $y == 0 and $f==1) $f = 0; $t=getimagesize ($path) or die('Unknown type of image'); $width=$t[0]; $height=$t[1]; if($x == 0 and $y == 0) { $x = $width; $y = $height; } switch ($t[2]) { case 1: $type='GIF'; $img=imagecreatefromgif($path); break; case 2: $type='JPEG'; $img=imagecreatefromjpeg($path); break; case 3: $type='PNG'; $img=imagecreatefrompng($path); break; } if($x > 0 and $y > 0 and $f == 0) { $x_tmp=$y*($width/$height); $y_tmp=$x*($height/$width); if($y_tmp < $y) $y = $y_tmp; else $x = $x_tmp; } if($x == 0) $x=$y*($width/$height); if($y == 0) $y=$x*($height/$width); header("Content-type: image/".$type); if($f == 1) { $thumb=imagecreatetruecolor($x,$y); imagecopyresampled($thumb,$img,0,0,0,0,$x,$y,$width,$height); } else { if($width>$x) { $thumb=imagecreatetruecolor($x,$y); imagecopyresampled($thumb,$img,0,0,0,0,$x,$y,$width,$height); } else { $thumb=imagecreatetruecolor($width,$height); imagecopyresampled($thumb,$img,0,0,0,0,$width,$height,$width,$height); } } $thumb=imagejpeg($thumb); return $thumb; } if($_GET['name']) { if($_GET['w']>0) $w = (int)$_GET['w']; else $w = 0; if($_GET['h']>0) $h = (int)$_GET['h']; else $h = 0; if(isset($_GET['forcibly'])) $forcibly = 1; else $forcibly = 0; //принудительно //if($w == 0 and $h == 0) $w = 150; //значение ширины по умолчанию, если не заданы параметры echo thumb($_GET['name'], $w, $h, $forcibly); } ?> Пример использования: <img src="view_pic.php?name=files/6383.jpg&w=150&h=100&forcibly" border="0" /> где: view_pic.php - имя файла с этим скриптом |
Тут же размещу небольшой вопросик по данному скрипту:
Если изображение большое, к примеру: 3000х3000 800kb, тогда возникает следующая ошибка: Цитата:
|
Писал такое как-то, только еще с наложением водяного знака.
|
ошибка в общем-то как понятно из ее описания в нехватке памяти.
рисунок указаных вами размеров в TRUECOLOR режиме должен занимать не менее 27 метров в памяти. остальная сожратая память, мне непонятна, но либо это какая-то дополнительная память выделяемая под рисунок, либо какой-то глюк getimagesize() единственно возможное лечение в данном случае-либо не работать со столь большими рисунками, либо выделять больше памяти под PHP а вообще, лучше ИМХО превьюшки делать не на лету, а заранее на ненагруженной машине, выделив необходимую память скриптам спокойно наделать превьюшек во временные папки, например.ну или типо того |
Gvozd
С этим полностью согласен) но когда допустим нужно вывести всего 1 картику на экран, то скрипт в этом случае, именно то что нужно. Также подобные превьюшки актуальны для CMS, т.к. пользователь может загрузить тысячу фото. После он вставит каждую фотку в страницу, и о них забывает, следовательно превьюшки в будущем не понадабятся) Так зачем занимать лишнее место? ) Зато предлагаемый вами способ очень актален на сайтах, т.к. наплыв посетителей громадный, и если на каждое фото ждать обработчик, то лимит загрузки ЦП у хостера вскоре будет достигнут. P.S.: Ну и мысли... еще не проснулся |
Часовой пояс GMT +3, время: 17:00. |