[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изменение размера изображения и остальной код.
admrp
Здравствуйте!
При попытке использовать функции GD изменить размер изображения возникают некоторые трудности ---Изменённое изображение выводится только если код размещается в начале файла, если код помещается в другой код или конец файла, то изображение не выводится, а появляются наборы симолов и ошибки GD.
	function reImg($outf, $inf, $neww, $newh, $quality)
{
$im = imagecreatefromjpeg($inf);
$im1 = imagecreatetruecolor($neww, $newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
imagejpeg($im1,$outf,$quality);
imagedestroy($im);
imagedestroy($im1);
}

$y = 0;

$tmp = scandir('test_image');
$dir = array_diff($tmp, array('.', '..'));
foreach($dir as $dfree)
{
$y++;
$temp = scandir('test_image/'.$dfree);
$dirs = array_diff($temp, array('.', '..'));
$count = count($dirs);
if($count < 8)
{
$upd = $_SERVER['DOCUMENT_ROOT'].'/test/test_image/'.$y.'/';
$upf = $upd.basename($_FILES['file']['name']);
if(copy($_FILES['file']['tmp_name'], $upf))
{
echo"<h3>Файл загружен</h3>";
}
else
{
echo "<p align='center'><b>Ошибка! Не удалось загрузить файл!</b></p>";
reImg('', 'snegovichki.jpg', 800, 700, 100);
exit();
}
}




Спустя 4 минуты, 1 секунда (24.08.2010 - 14:35) linker написал(а):
При таком раскладе
reImg('', 'snegovichki.jpg', 800, 700, 100);
вывод картинки будет произведен в браузер, а значит никакого echo до этого быть в принципе не должно. И вообще не понятна логика, если файл не загружен, то чего там ресайзить?

Спустя 2 минуты, 42 секунды (24.08.2010 - 14:37) admrp написал(а):
Это не относится к скрипту, просто для примера показал что мне не понятно.
и прошу, поясните , почему не должно быть echo . с чем это связано ?
и ещё не понятно почему после вывода изображения не выполняется последующий код.

Спустя 25 минут, 6 секунд (24.08.2010 - 15:02) Rand написал(а):
Цитата
изображение не выводится, а появляются наборы симолов

набор символов - это и есть изображение, только в байтовом представлении. Когда вы выводите на экран текст, php посылает заголовок Content-Type: text/html, соответственно браузер считает, что в теле запроса - только текст. А когда никакого вывода в браузер нет, вероятно, что функция imagejpeg автоматически устанавливает заголовок Content-Type: image/jpeg и браузер понимает, что запрос содержит изображение, а не текст, и отображает его нормально. Если вы хотите вывести картинку на экран вместе с текстом - вначале сохраните её на сервере, а потом уже вставляйте средствами html.

Спустя 4 минуты, 26 секунд (24.08.2010 - 15:07) admrp написал(а):
Цитата
набор символов - это и есть изображение, только в байтовом представлении. Когда вы выводите на экран текст, php посылает заголовок Content-Type: ...

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

Спустя 2 минуты, 1 секунда (24.08.2010 - 15:09) linker написал(а):
Понимаешь, браузеру, чтобы адекватно работать, необходимо знать какой-контент ему отдается: текст, xml, html, картинка и пр. Для этого есть HTTP-заголовки, через которые можно передать также и тип контента, по умолчанию это тупо html, т.е. текст. Соответственно, если ты пытаешься отдать браузеру картинку, ты должен сообщить ему об этом иначе он воспримет данные как текст и выведет в окне всякую муть. Но, если ты делаешь все как положено, то ты не должен выводить ничего кроме собственно картинки, т.е.
echo "тра-ля-ля";
исключены вообще.
Далее, функция imagejpeg() принимает несколько параметров, вторым из которых является имя файла. Собственно по пустоте или наличию данного параметра, PHP решает отдать изображение в браузер или сохранить в указанный файл, соответственно.

В приведенном примере, после вывода вообще нет никакого кода и вообще стоит exit();


_____________
"...истина где-то рядом..."
Быстрый ответ:

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