[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ресайз изображения и загрузка в браузер
Fox M. Lurde
Доброго времени суток.

Прошу прощения, вопрос, скорее всего, совсем ламерский, но все же...

есть скрипт, который грузит картинку с компа на сервер, уменьшает ее размер и потом выводит ее в браузер.

Заковырка в том, что в заданную директорию попадает уменьшенная копия, но вот в браузер грузится копия с оригинальтным размером. В чем может быть дело?

<?

function
resize_image($name_big, $name_small, $max_x, $max_y){

//получаем размер изображения
list($x,$y,$t,$attr)=getimagesize($name_big);
//получаем имя исходного изображения
$big=imagecreatefromjpeg($name_big);
//выводим исходный размер в браузер
echo $x.', '.$y.'<br/>';
//ресайзим изображение в соответствии с заданными параметрами
if($x>$y){
$xs=$max_x;
$ys=$max_y/($x/$y);
}else{
$ys=$max_y;
$xs=$max_x/($y/$x);
}
//выводим в браузер новые размеры изображения
echo $xs.', '.$ys;

$small=imagecreatetruecolor($xs,$ys);

$res=imagecopyresampled($small,$big,0,0,0,0,$xs,$ys,$x,$y);

imagedestroy($big);
imagejpeg($small,$name_small);
imagedestroy($small);

}

if($_FILES['filename']['name']){

$uploaddir = '/home/test1.ru/www/uploads/';

$uploadfile = $uploaddir . basename($_FILES['filename']['name']);

move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile);

resize_image($uploadfile,$uploadfile,200,200);


//для простоты явно указываю, где именно лежит файл (проверяю руками - он там лежит, с измененными размерами)
$img='uploads/Untitled-1.jpg';
//выводим изображение в браузер
echo '<img src="'.$img.'"><br/>';

}

?>

<form action="<? $_SERVER['SELF_PHP'] ?>" method="POST" enctype="multipart/form-data">

<
input type="file" name="filename" /><br/>
<
input type="submit" value="UPLOAD" />

</
form>




Спустя 1 минута, 37 секунд (8.04.2010 - 22:54) twin написал(а):
А где тут браузер?

Спустя 2 минуты, 58 секунд (8.04.2010 - 22:57) waldicom написал(а):
Цитата (twin @ 8.04.2010 - 21:54)
А где тут браузер?

Цитата (Fox M. Lurde @ 8.04.2010 - 21:52)
echo '<img src="'.$img.'"><br/>';



Правда не понятно, зачем эта запись:
$img='uploads/Untitled-1.jpg';

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

Спустя 14 минут, 13 секунд (8.04.2010 - 23:11) Fox M. Lurde написал(а):
почистил код

Спустя 8 часов, 27 минут, 34 секунды (9.04.2010 - 07:39) twin написал(а):
Этого не может быть. Разве что кэш какой ниибудь.

Спустя 9 часов, 45 минут, 50 секунд (9.04.2010 - 17:25) Fox M. Lurde написал(а):
я понимаю, что быть этого не моет, и грузит он его откуда-нибудь из кэша. Но к стыду своему, я не дакадываюсь, из какого именно, а так как в этом случае его обойти. может быть, есть какие-нибудь варианты?

Спустя 9 минут, 55 секунд (9.04.2010 - 17:34) Fox M. Lurde написал(а):
Подумал. Понял, в чем ошибка.

После исполнения скрипта элемент массива $_FILES['filename']['name'] содержит имя изображения. Если после исполнения нажать F5 (перегрузить страничку, не выключая), скрипт сразу же выполнять функцию над имеющимся изображением (предыдущим), а текущее как бы ляжет в ожидании следующей очереди.

попробовал решить след. образом

<?

function
resize_image($name_big, $name_small, $max_x, $max_y){

//...

}

if($_SERVER['REQUEST_METHOD']=='POST'){

//upload and resize
//...


}else{

$_FILES['filename']['tmp_name']=$_FILES['filename']['name']=null;

}

?>


не помогло((

Спустя 1 час, 28 минут, 47 секунд (9.04.2010 - 19:03) twin написал(а):
Неверно понял.
Цитата
После исполнения скрипта элемент массива $_FILES['filename']['name']
не содержит ничего, так как скрипт уже отработан.

Скрипт конечно не идеален, но работает на ура. Или он тут не весь, или нужно ставить свечку - полтергейст.

А так работает?
<?

function
resize_image($name_big, $name_small, $max_x, $max_y){

//получаем размер изображения
list($x,$y,$t,$attr)=getimagesize($name_big);
//получаем имя исходного изображения
$big=imagecreatefromjpeg($name_big);
//выводим исходный размер в браузер
echo $x.', '.$y.'<br/>';
//ресайзим изображение в соответствии с заданными параметрами
if($x>$y){
$xs=$max_x;
$ys=$max_y/($x/$y);
}else{
$ys=$max_y;
$xs=$max_x/($y/$x);
}
//выводим в браузер новые размеры изображения
echo $xs.', '.$ys;

$small=imagecreatetruecolor($xs,$ys);

$res=imagecopyresampled($small,$big,0,0,0,0,$xs,$ys,$x,$y);

imagedestroy($big);
imagejpeg($small,$name_small);
imagedestroy($small);

}

if($_FILES['filename']['name']){

// $uploaddir = '/home/test1.ru/www/uploads/';

$uploadfile = $uploaddir . basename($_FILES['filename']['name']);

move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile);

resize_image($uploadfile,$uploadfile,200,200);


//для простоты явно указываю, где именно лежит файл (проверяю руками - он там лежит, с измененными размерами)
//$img='uploads/Untitled-1.jpg';

$img=$_FILES['filename']['name'];
//выводим изображение в браузер
echo '<img src="'.$img.'"><br/>';

}

?>

<form action="<? $_SERVER['SELF_PHP'] ?>" method="POST" enctype="multipart/form-data">

<
input type="file" name="filename" /><br/>
<
input type="submit" value="UPLOAD" />

</
form>

Спустя 12 часов, 23 минуты, 35 секунд (10.04.2010 - 07:27) Fox M. Lurde написал(а):
Нет, фаберже тот же. Я, видимо, всё-таки не очень точно объяснил, что происходит. Загружаю страничку со скриптом в браузер (в первый раз). Загружаю картинку. Картинка отображается корректно. Потом в скрипте меняю размер изображения (скажем, не 200, а 50 точек). В браузере нажимаю Enter, затем F5, что бы обновить страничку со скриптом. Загружаю картинку. Браузер выводит в окно картинку с предыдущими размерами (200 точек). Но в директории лежит картинка с уже измененными (50 точек). После нажатия F5 браузер спрашивает, послать ли данные заново - отвечаю Да. И тогда уже выводится картинка с правильными размерами. Вот как-то так.

Спустя 26 минут, 14 секунд (10.04.2010 - 07:53) twin написал(а):
Тьфу ты, господи... Напугал. Я уж думал барабашка. smile.gif
Ну это самый банальный кэш и есть. Так попробуй:
$img='uploads/Untitled-1.jpg?'. time();

Спустя 1 день, 11 часов, 27 минут, 53 секунды (11.04.2010 - 19:21) Fox M. Lurde написал(а):
Огромное спасибо! Всё стало работать, как надо.

Объясните, пожалуйста, как это работает? Что происходило до и что происходит теперь?

Спустя 4 минуты, 35 секунд (11.04.2010 - 19:26) Семён написал(а):
Теперь браузер думает, что это другое изображение. smile.gif

Спустя 46 минут, 58 секунд (11.04.2010 - 20:13) Fox M. Lurde написал(а):
Не совсем понятно, почему он так думает?

Спустя 13 минут, 27 секунд (11.04.2010 - 20:26) Nikitian написал(а):
Адрес файла изменился, имя осталось прежним, но идентичность определяется в том числе и по адресу.

Спустя 14 минут, 2 секунды (11.04.2010 - 20:40) Fox M. Lurde написал(а):
хм... Благодарю всех!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.