Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2009, 11:20
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Скрипт показа уменьшеных изображений
Хотелось бы поделиться своей доработкой одного из скриптов:
Скрипт для создания превьюшек изображений

<?
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 - имя файла с этим скриптом
files/6383.jpg - имя изображения относительно данного файла
w=150 - задаем ширину в 150px
h=100 - задаем высоту в 100px
forcibly - в переводе с англ. "принудительно" - если написать данный параметр, то размер изображения измениться, игнорируя соблюдение пропорций
все параметры кроме имени изображения являются не обязательными
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2009, 11:24
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Тут же размещу небольшой вопросик по данному скрипту:
Если изображение большое, к примеру: 3000х3000 800kb, тогда возникает следующая ошибка:
Цитата:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2548 bytes) in C:\xampp\htdocs\view_pic.php on line 17
С небольшими изображениями работает исправно. Буду рад услышать замечания и критику по данному скрипту.
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2009, 12:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Писал такое как-то, только еще с наложением водяного знака.
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2009, 23:49
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,233

ошибка в общем-то как понятно из ее описания в нехватке памяти.
рисунок указаных вами размеров в TRUECOLOR режиме должен занимать не менее 27 метров в памяти.
остальная сожратая память, мне непонятна, но либо это какая-то дополнительная память выделяемая под рисунок, либо какой-то глюк getimagesize()
единственно возможное лечение в данном случае-либо не работать со столь большими рисунками, либо выделять больше памяти под PHP
а вообще, лучше ИМХО превьюшки делать не на лету, а заранее на ненагруженной машине, выделив необходимую память скриптам спокойно наделать превьюшек во временные папки, например.ну или типо того
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2009, 03:51
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Gvozd
С этим полностью согласен) но когда допустим нужно вывести всего 1 картику на экран, то скрипт в этом случае, именно то что нужно. Также подобные превьюшки актуальны для CMS, т.к. пользователь может загрузить тысячу фото. После он вставит каждую фотку в страницу, и о них забывает, следовательно превьюшки в будущем не понадабятся) Так зачем занимать лишнее место? ) Зато предлагаемый вами способ очень актален на сайтах, т.к. наплыв посетителей громадный, и если на каждое фото ждать обработчик, то лимит загрузки ЦП у хостера вскоре будет достигнут.
P.S.: Ну и мысли... еще не проснулся
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает в опере, работает в IE XpycTuk Общие вопросы Javascript 9 06.03.2009 15:50
Ищу скрипт Niklan Общие вопросы Javascript 5 27.02.2009 12:27
А как зделать скрипт, чтобы например скрипт 1 заменялся скриптом 2? yura371 Общие вопросы Javascript 3 06.01.2009 22:40
добавление окошка в скрипт подсчета слов Гость Общие вопросы Javascript 10 11.03.2008 17:07
Скрипт замены парных изображений SunYang Events/DOM/Window 0 05.03.2008 01:32