Изображение не может быть отображено, поскольку оно содержит ошибки

Почему этот код не работает?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>

        <title></title>
    </head>
    <body>
        <?php
        header('Content-type: image/png');
        $myImage = imagecreate(200, 100);
        $myGray = imagecolorallocate($myImage, 204, 204, 204);
        $myBlack = imagecolorallocate($myImage, 0, 0, 0);
        imageline($myImage, 15, 35, 120, 60, $myBlack);

        imagepng($myImage);
        imagedestroy($myImage);
        ?>
    </body>
</html>

Я всегда получаю ошибку The image cannot be displayed because it contains errors.. Я уже включил php_gd2.dll и memory_limit в php.ini также 128M. Если я удалю header('Content-type: image/png');, я не получу ошибку, но я тоже не вижу изображение. Все, что я вижу, это: -

‰PNG ��� IHDR���È���d���ùHíH���PLTEÌÌÌ���Ó33d���MIDATH‰c £ Àx�§" Nf*k²Ã)Ãø�§"•5}À)ÅS†ÚšpJUà"a§²¦œ2ÔŽw<špJ‚Q0 †;�� uTBúŸ����IEND®B, `

Ответы

Ответ 1

Вы не должны выводить ничего перед заголовком(). Просто запустите свой документ с помощью <?php, а затем код для отображения изображения. Пропустите теги html. Даже не пишите одну строчку перед заголовком().

Если вы хотите отобразить изображение внутри своего html-документа, вы должны сделать это в двух файлах. Один, назовите его, например, image.php, содержащий только код php, включая заголовок. Второй файл, вызывающий его show.php или show.html, включает в себя код html, который вам нравится, включая <img src="image.php" alt="Your generated image" />.

Ответ 2

Если вы base64 кодируете вывод, вы можете напрямую использовать изображение с помощью схемы URI данных.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>

        <title></title>
    </head>
    <body>
        <?php

        $myImage = imagecreate(200, 100);
        $myGray = imagecolorallocate($myImage, 204, 204, 204);
        $myBlack = imagecolorallocate($myImage, 0, 0, 0);
        imageline($myImage, 15, 35, 120, 60, $myBlack);
        ob_start();
        imagepng($myImage);
        printf('<img src="data:image/png;base64,%s"/>', 
                base64_encode(ob_get_clean()));

        imagedestroy($myImage);
        ?>
    </body>
</html>

Обратите внимание, что URI данных не поддерживаются всеми браузерами (предположим, что).

Ответ 3

Вы должны выводить только изображение. Вы выводите кучу меток. Конкретно

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >     

    <title></title>
</head>
<body>

а затем изображение как двоичное. Если вы хотите увидеть это, wget страницу со своего сервера и попробуйте открыть ее в редакторе. Ваш код должен начинаться с <?php.

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

Ответ 4

Даже если вы считаете, что вы удалили весь текст из заголовка(), ваш PHP файл может содержать Байт-маркер заказа

Это будет незаметно для вас в вашем редакторе, но ваш браузер увидит его и подумает, что изображение повреждено. Чтобы удалить любую спецификацию, вам необходимо выполнить действия, соответствующие вашему редактору.

Ответ 5

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

<?php
    header('Content-type: image/png');
    $myImage = imagecreate(200, 100);
    $myGray = imagecolorallocate($myImage, 204, 204, 204);
    $myBlack = imagecolorallocate($myImage, 0, 0, 0);
    imageline($myImage, 15, 35, 120, 60, $myBlack);

    imagepng($myImage);
    imagedestroy($myImage);
?>

Ответ 6

Я изолировал PHP script в свой собственный файл (image.php), и он работал нормально: у меня появился серый прямоугольник с черной наклонной строкой. Ваша проблема пытается внедрить это в HTML файл.

Вам нужен PHP в своем собственном отдельном файле (как и я, назовите его image.php или чем-то более подробным описанием для ваших нужд), а затем создайте файл HTML следующим образом:

<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <img src="image.php" alt="" />
  </body>
</html>

Затем вы должны получить желаемый результат.

Ответ 7

При попытке вывести jpg профиля профиля Facebook из своего API-интерфейса Graph с помощью PHP, Я заметил, что если файл PHP сохраняется с кодировкой UTF-8 - эта ошибка была возвращена, но если файл был сохранен с кодировкой ANSI - то он работал нормально.

Ответ 8

Если у вас есть эта проблема, попробуйте удалить любой пробел между началом script и тегом php

> <?php

Я провел несколько часов, прежде чем осознал это. И теперь он работает нормально. Это происходит потому, что любой символ в файле изменяет формат png. Это отлично поработало для меня.

Ответ 9

У меня была та же проблема, и решение заключалось в том, чтобы изменить кодировку кода с UTF-8 на ansi или наоборот. Если сервер настроен на UTF-8, а ваш код находится в ansi, это не работает, и если ваш код находится в ansi, и сервер не настроен на UTF-8.

Ответ 10

Если вы используете Filezilla для загрузки своих веб-страниц, убедитесь, что вы выбрали тип передачи как 'Auto/Binary'.

Перенос → Тип передачи → Авто/Двоичный.