За последние 24 часа нас посетили 18367 программистов и 1599 роботов. Сейчас ищут 913 программистов ...

Вывод рисунка в из файла в браузер.

Тема в разделе "PHP для новичков", создана пользователем Alexer, 14 апр 2008.

  1. Alexer

    Alexer Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Москва
    Доброго времени суток.
    Возникла следующая проблема: код вида
    <?
    $image = ImageCreateFromJpeg("007.jpg");

    ImageJpeg($image);
    ImageDestroy($image);
    ?>
    выводит вместо рисунка набор беспорядочных символов, если вставить его в html-страницу, если же использовать в файле php, то выводит рисунок в Эксплорер, а в Опере отображается тот же набор символов. Что здесь не так?
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. header('Content-Type: image/jpeg');
    Или типа того.
     
  3. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    header('Content-type:......
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ха-ха, я первее! :)
     
  5. Alexer

    Alexer Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Москва
    Пустая строка в коде, как раз от того, что вы предложили. С нею php ещё и ругается, пишет что-то вроде того, что заголовок передавать не требуется.
     
  6. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Alexer - Пишет что "вы неможете пердать заголовки так как уже началась выдача тела документа" скорее так :)

    пустая строка в каком коде ?


    стоит делится ошибками, а не пытаться их придумать ..
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Alexer
    error_reporting (9) + полный текст ошибки.
    Скорее всего
     
  8. Alexer

    Alexer Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Москва
    Это начало белиберды, которую выдаёт Эксплорер вместо рисунка, при выполнении кода:

    <html>
    <head><title>11111</title></head>
    <body>
    <?
    include "index3/php";
    ?>
    </body>
    </html>

    Файл index3.php:

    <?
    $image = ImageCreateFromJpeg('007.jpg');
    Header('Content-type image/jpeg');
    ImageJpeg($image, 'test.jpg');
    ImageDestroy($image);
    ?>

    При загрузке index3.php непосредственно в Эксплорер отображается картинка, в Оперу - крякозябры. В случае html - крякозябры и там и там.
    При удалении из файла index3.php строки Header('Content-type image/jpeg'); предупреждение пропадает, но картинка не отображается.
     
  9. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Alexer - я был уверен :)

    первое очень важно прочесть и осознать

    http://www.phpfaq.ru/na_tanke

    второе .. неужели ты думаешь чт браузеры такие умные и будут за тебя отделять картинку от хтмль ???

    третье .. как уже сказал .. ты сначало распечатал теги а потом пытаешься передать заголовок .. неудивительно что у тебя ошибка! заголовок должен идти до ЛЮБОЙ выдачи документа в браузер



    index.php
    PHP:
    1.  
    2. <html>
    3. <head><title>11111</title></head>
    4. <body>
    5. <img src="index3.php">
    6. </body>
    7. </html>
    8.  
    Файл index3.php:
    PHP:
    1.  
    2. <?php
    3. $image = ImageCreateFromJpeg('007.jpg');
    4. Header('Content-type image/jpeg');
    5. ImageJpeg($image);  <- здесь тоже обрати внимание .. ты выдавал картинку в фаил, а не поток - а как она в браузер то попадет подумал ?
    6. ImageDestroy($image);
    7. ?>
    8.  
     
  10. Alexer

    Alexer Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Москва
    Практически всё, что там написано, я знаю.

    Не думал, но открывать картинку побайтно и отображать каждый байт в виде символа - это слишком, притом, что функция ImageJpeg должна выводить картинку в браузер, а не что-либо ещё.

    А вот тут непонятно. Можно поподробней? То есть получается, что код, использующий графические функции нельзя встраивать в html?

    Как не в поток, если бы я её выдавал в файл, то было бы примерно так: ImageJpeg($image, 'test.jpg); Это привело бы к появлению нового файла и пустому браузеру. У меня же в Эксплорере картинка ВЫВОДИТСЯ из файла index3.php, а в Опере появляются крякозябры.
     
  11. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Alexer если знаешь то откуда вопросы ?

    вообщем картинка передается отдельно от хтмль ... хтмль - только указывает где она должна вывестись !
    ( ты гденибудь видел внутри хтмль[разметки] тело картинки ??? врядли .. )
    так и здесь .. сначало ты передаешь браузеру ХТМЛЬ, потом картинку .. это два разных запроса!

    при этом пхп как был так и остался на сервере .. и браузер о пхп вообще ничего не знает ...
     
  12. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://luge.jino-net.ru/image/ :)
     
  13. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Luge - блин так и знал что ктонить выпендрится!!! .... а теперь обясни через это "узкое место" как и где работает пхп код
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ещё с утра работала на сервере, но, судя по количеству желающих, скоро будет работать везде…

    Тут у человека вопрос не в том, где, а в том, что прочитав про
    HTML:
    1.  
    2. <!-- много хтмля -->
    3. <? echo 'Строчко' ?>
    4. <!-- опять много хтмля -->
    5.  
    он считает это нормальным поведением для любой функции.

    Alexer, если бы это был первый вывод на странице (или вообще единственный), то всё было бы именно так, как Вы и написали, но тут появляются некоторые особенности
    PHP:
    1. <?php
    2.   header('Content-type: image/png'); // устанавливаем тип документа - "изображение в формате PNG".
    3. ?>
    без заголовка Content-type браузер и выведет
    а сам заголовок должен быть отправлен ДО любого другого вывода в браузер
    http://php.net/header
    PHP:
    1. <html>
    2. <?php
    3. /* This will give an error. Note the output
    4.  * above, which is before the header() call */
    5. header('Location: [url=http://www.example.com/']http://www.example.com/'[/url]);
    6. ?>
    По-русски и понятно про заголовки на http://phpfaq.ru/headers

    Вот и получается, что выход из положения такой, как тебе уже подсказал nimistar

    index.php
    PHP:
    1.  
    2. <html>
    3. <head><title>11111</title></head>
    4. <body>
    5. <img src="index3.php">
    6. </body>
    7. </html>
    8.  
    Файл index3.php:
    PHP:
    1.  
    2. <?php
    3. $image = ImageCreateFromJpeg('007.jpg');
    4. Header('Content-type image/jpeg');
    5. ImageJpeg($image);  
    6. ImageDestroy($image);
    7. ?>
    8.  
     
  15. Alexer

    Alexer Активный пользователь

    С нами с:
    13 апр 2008
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Москва
    Да, именно на это я и расчитывал.

    У меня нет файла image.php. Я думал, что он это определит по данным, передаваемым функцией ImageJpeg.

    Поймите, что браузер показывает крякозябры вместо рисунка, независимо от наличия/отсутствия строки Content-type.

    Проблема как раз в том, что это же он выводит и с указанием Content-type.

    index.php
    PHP:
    1. <html>
    2. <head><title>11111</title></head>
    3. <body>
    4. <img src="index3.php">
    5. </body>
    6. </html>
    Файл index3.php:
    PHP:
    1. <?php
    2. $image = ImageCreateFromJpeg('007.jpg');
    3. Header('Content-type image/jpeg');
    4. ImageJpeg($image);  
    5. ImageDestroy($image);
    6. ?>
    [/quote]
    Такая вещь прекрасно работает, но что получится, если я буду выводить таблицу с кучей рисунков таким образом? Не окажутся ли у меня крякозябры вместо рисунков?
     
  16. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не окажутся