Поддержка GD в php - PullRequest
       8

Поддержка GD в php

0 голосов
/ 30 декабря 2011

Я использую "xampp-win32-1.7.1-installer" в качестве сервера и Dreamwaver CS5 для кодирования.Я хочу включить поддержку php GD.Я видел, что

phpinfo();

показывает, что поддержка GD включена.Но это все еще не работает.Я не знаю, почему это не работает?Что мне делать?

Ну, вообще-то, я хочу создать изображение с помощью php.Есть текстовое поле и кнопка отправки.Когда я даю информацию и нажимаю «Отправить», она появляется в этом окне.Это можно сделать на многих других платформах, но на этот раз я хочу сделать это на php.

, вот мой код:

<?php
header("Content-type: image/jpeg");
?>
<form action="Creating_Images_with_PHP.php" method="get">
<input type="text" name="name" />
    <input type="submit" value="Enter" />
</form>

<?php
$name = $_GET['name'];
$message = "Welcome to php academy, $name";

$length = strlen($message) * 9.3;

$image = imagecreate($length, 20);
$background = imagecolorallocate($image, 0, 0, 0);
$foreground = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 5,5,1, $message, $foreground);

imagejpeg($image)
?>

, и отображается ошибка:

"The image http://localhost/www/...blaa blaa blaa cannot be displayed because it contains errors."

Ответы [ 4 ]

1 голос
/ 30 декабря 2011

Я пробовал с вашим кодом.У меня отлично работает.

<?php 

if(isset($_GET['name']))
{
header("Content-type: image/jpeg");
$name = $_GET['name'];
$message = "Welcome to php academy, $name";

$length = strlen($message) * 9.3;

$image = imagecreate($length, 20);
$background = imagecolorallocate($image, 0, 0, 0);
$foreground = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 5,5,1, $message, $foreground);

imagejpeg($image);
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="" method="get">
<input type="text" name="name" />
    <input type="submit" value="Enter" />
</form>
</body>
</html>
1 голос
/ 30 декабря 2011

Вы действительно отправляете HTML ПОСЛЕ того, как отправляете заголовок содержимого image / jpeg?

Попробуйте как следует:

<?php
    ob_start();
?>

<form action="Creating_Images_with_PHP.php" method="get">
    <input type="text" name="name" />
    <input type="submit" value="Enter" />
</form>

<?php
    if (isset($_GET['name']) && !empty($_GET['name']))
    {
        ob_clean();
        header("Content-type: image/jpeg");
        $name = $_GET['name'];
        $message = "Welcome to php academy, $name";

        $length = strlen($message) * 9.3;

        $image = imagecreate($length, 20);
        $background = imagecolorallocate($image, 0, 0, 0);
        $foreground = imagecolorallocate($image, 255, 255, 255);

        imagestring($image, 5,5,1, $message, $foreground);

        imagejpeg($image);
    }
?>

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

edit: исправлена ​​небольшая ошибка.

1 голос
/ 30 декабря 2011

Это потому, что ваша HTML-форма добавлена ​​в начало вывода изображения.

Сделайте их отдельными скриптами или измените их на:

<?php
if (isset($_GET['name']) && $_GET['name']!='')
 {
 header("Content-type: image/jpeg");
 $name = $_GET['name'];
 $message = "Welcome to php academy, $name";

 $length = strlen($message) * 9.3;

 $image = imagecreate($length, 20);
 $background = imagecolorallocate($image, 0, 0, 0);
 $foreground = imagecolorallocate($image, 255, 255, 255);

 imagestring($image, 5,5,1, $message, $foreground);

 imagejpeg($image);
 }
else
{
echo '<html><body><form action="Creating_Images_with_PHP.php" method="get">
<input type="text" name="name" />
    <input type="submit" value="Enter" />
</form></body></html>';
}
?>
0 голосов
/ 30 декабря 2011

ваш вывод изображения в виде необработанных данных.Это нормально, но вы также отправляете html-код, повреждая, таким образом, ваше изображение.

Для начала вам нужно разделить их, и это должно создать то, что вам нужно, если ваш существующий код php работает.

Some.html

<form action="Creating_Images_with_PHP.php" method="get">
<input type="text" name="name" />
    <input type="submit" value="Enter" />
</form>

Создание_Images_with_PHP.php

<?php

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

$name = $_GET['name'];
$message = "Welcome to php academy, $name";

$length = strlen($message) * 9.3;

$image = imagecreate($length, 20);
$background = imagecolorallocate($image, 0, 0, 0);
$foreground = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 5,5,1, $message, $foreground);

imagejpeg($image)
?>

После того, как вы проверили, вы можете работать над созданием сценария и HTML-кода в одном файле.Это можно сделать, проверив информацию запроса в поле вашего имени:

if(isset($_GET['name'][1])){
    /* generate image */
}else{
    /* output form */
}
...