Изображение не может быть отображено, поскольку оно содержит ошибки
Почему этот код не работает?
<!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'
.
Перенос → Тип передачи → Авто/Двоичный.