При попытке использовать функции 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 . с чем это связано ?
и ещё не понятно почему после вывода изображения не выполняется последующий код.
и прошу, поясните , почему не должно быть 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, т.е. текст. Соответственно, если ты пытаешься отдать браузеру картинку, ты должен сообщить ему об этом иначе он воспримет данные как текст и выведет в окне всякую муть. Но, если ты делаешь все как положено, то ты не должен выводить ничего кроме собственно картинки, т.е.
Далее, функция imagejpeg() принимает несколько параметров, вторым из которых является имя файла. Собственно по пустоте или наличию данного параметра, PHP решает отдать изображение в браузер или сохранить в указанный файл, соответственно.
В приведенном примере, после вывода вообще нет никакого кода и вообще стоит exit();
echo "тра-ля-ля";исключены вообще.
Далее, функция imagejpeg() принимает несколько параметров, вторым из которых является имя файла. Собственно по пустоте или наличию данного параметра, PHP решает отдать изображение в браузер или сохранить в указанный файл, соответственно.
В приведенном примере, после вывода вообще нет никакого кода и вообще стоит exit();
_____________
"...истина где-то рядом..."