Подскажите новичку по GD

Статус
В этой теме нельзя размещать новые ответы.

yuz

Новичок
Подскажите новичку по GD

Всем привет. Я тут впервые. Вебом занимаюсь совсем недавно.

Суть вопроса ...

Написал функцию для автоматической подгонки рисунков под определённые размеры.
Примеры посмотрел, попробовал - получилось.
Однако изначально не получалось выводить изменённый рисунок непосредственно в поток.
Проблему решил сохранением изменённого рисунка в темп-папку и выдачей из функции ссылки на него.

Хотелось бы разобраться. В одном из примеров прочитал, что перед выводом изображения в поток на страницу не должны выводится символы (точной формулировки не помню).

Тестовый пример подтверждает это замечание:

Так нормально:
<?php
include("./functions.php");
ImgResize('f.jpg',150,100);
?>


Тут вывод набора символов вместо изображения:
<?php
include("./functions.php");
есho ("Вывод любого текста");
ImgResize('f.jpg',150,100);
?>

А вообще должно быть что-то вроде:
echo ("<img src='".ImgResize('img_file.jpg',150,100)."'>"."<BR>");


Часть кода который непосредственно делает вывод в поток

case 2: // Если тип файла jpeg

header("Content-type: image/jpeg");

$SrcImg=imagecreatefromjpeg($SrcFile);
$DstImg=imagecreatetruecolor($DstW,$DstH);

imagecopyresized($DstImg,$SrcImg,0,0,0,0,$DstW,$DstH,$SrcW,$SrcH);

// imagejpeg($DstImg,$DstPath.$DstFile,$Qual); // Это вывод в файл (отключил)
imagejpeg($DstImg);

imagedestroy($SrcImg);
imagedestroy($DstImg);

break;
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Хотелось бы разобраться. В одном из примеров прочитал, что перед выводом изображения в поток на страницу не должны выводится символы (точной формулировки не помню).
[m]Header[/m]
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

include("./functions.php");
есho ("Вывод любого текста");<<-ВЫВОД в браузер.
После этого заголовки (Header) послать нельзя.
В вашем случае это header("Content-type: image/jpeg"), что отсылается в
ImgResize('f.jpg',150,100);

Включите вывод всех ошибок, тогда увидите ошибки.
http://www.phpfaq.ru/debug
 

yuz

Новичок
Спасибо за ответ.

Этот вариант я уже пробовал - по поводу Хеадера пишут на всех форумах.

Скажем если строку header("Content-type: image/jpeg") исключить вообще, то ситуация та же - в первом случае вывод нормальный, во втром - набор символов.

Поставлю вопрос более точно.

Вызов функции ImgResize('f.jpg',150,100) необходимо включить в HTML-код (шаблон Smarty), а там куча всего разного (типа http-equiv="Content-Type" content="text/html"), плюс вывод обычного текста и т.д.

Вы можете подсказать в трёх словах в каком порядке, где и что включать (Хеадеры) и вызывать (Функции)

Возможно в Хтмл-е должно быть так:

<img src=" <?php ImgResize('img_file.jpg',150,100) ?> " >

PHP занимаюсь не более месяца, возможно где-то написал глупость :)

Спасибо
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
yuz
В поиск.
Обсуждается регулярно
 

yuz

Новичок
Всем спасибо за справедливую критику - книг нормально почитать я действительно ещё не успел.
Если бы сроки не поджимали, я бы не напрягал таким пустяковым вопросом уважаемых Гуру данного форума.
Но всё-таки послать на "Азбуку по ПХП" проще всего.

Я ожидал ответа вроде такого:

Например:

"Такой код НЕ пройдёт, поскольку получиш ответ в форме кучи символов:"

<?php header("Content-type: image/jpeg"); ?>
<html>
<body>
<?php
$ImgProp = getimagesize('x.jpg');
$SrcImg=imagecreatefromjpeg('x.jpg');
$DstImg=imagecreatetruecolor(100,100);
imagecopyresized($DstImg,$SrcImg,0,0,0,0,100,100,$ImgProp[0],$ImgProp[1]);

imagejpeg($DstImg); // Прямой вывод в поток внутри Хтмл-а делать НЕЛЬЗЯ !!!

imagedestroy($SrcImg);
imagedestroy($DstImg);
?>
</body>
</html>


"Необходимо, всё-таки, вызывать функцию, которая возвращает путь к файлу модифицированного рисунка (НО НЕ ДЕЛАЕТ ПРЯМОЙ ВЫВОД В ПОТОК БРАУЗЕРА)."

Я в принципе так и сделал (см. выше).
Например:

<html>
<body>
// Передаём в Хтмл (тег IMG) путь к файлу модифицированного рисунка
<img src="<?php echo (ImgResize('./x.jpg',170,170)); ?>">
</body>
</html>


Всё это можно было изложить в 10 раз короче - я бы понял ...

Основное, что мне хотелось узнать - можно ли в принципе обойтись без создания промежуточных модифицированных файлов рисунков (в Темп-папке сайта) перед их выводом в окно браузера.

Добавлю - задача состоит в распостранении копии сайта на СD-дисках, на который запись по определению невозможна
 

Фанат

oncle terrible
Команда форума
Но всё-таки послать на "Азбуку по ПХП" проще всего.
а вот прочитать её кое-кто не удосужился.

-~{}~ 06.08.07 17:43:

нахрена тебе что-то ресайзить в СТАТИЧЕСКОМ сайте?
сделал заранее ресайзы и записал на диск.
что за дурацкие идеи?

-~{}~ 06.08.07 17:44:

тем более, если время поджимает, то так и надо сделать.
тема закрыта.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху