TCM
TCM

Reputation: 16900

The image cannot be displayed because it contains errors

Why is this code not working ?

<!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>

I always get error The image cannot be displayed because it contains errors.. I've already enabled php_gd2.dll and memory_limit in php.ini is also 128M. If i remove header('Content-type: image/png'); i don't get the error but i don't see the image either. All i see is this :-

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

Upvotes: 18

Views: 77867

Answers (10)

Johan
Johan

Reputation: 5053

You must not output anything before header(). Just start your document with <?php (as the first file characters), followed by the code for displaying the image. Skip the HTML tags. Do not even write a single blankline before header().

If you want to display an image inside the html document of yours, you must do it in two files. One, call it for example image.php, containing only the PHP code including the header. The second file, call it show.php or show.html, includes the HTML code you like, including <img src="image.php" alt="Your generated image" />.

Upvotes: 30

Vishrant
Vishrant

Reputation: 16668

If you are using Filezilla to upload your webpages make sure you select transfer type as 'Auto/Binary'.

Transfer -> Transfer type -> Auto/ Binary.

Upvotes: 0

Danack
Danack

Reputation: 25701

Even if you think you have removed all the text from before header() your PHP file may contain a Byte Order Marker

This will be invisible to you in your editor, but your browser will see it and think the image is corrupt. You need to take the steps appropriate to your editor to remove any BOM.

Upvotes: 3

user1520676
user1520676

Reputation: 39

I had the same problem and the solution was to change the charset of the code from UTF-8 to ansi or viceversa. If the server is set to UTF-8 and your code is in ansi this don't work and if your code is in ansi and the server is configured to UTF-8 neither.

Upvotes: 0

sneha
sneha

Reputation: 31

If you have this problem, try to delete any space character between the begin of the script and the php tag

> <?php

I spent several hours before realize this. And now it works OK. This happens because any character on the file alter the png format. This worked great for me.

Upvotes: 3

Yuval A.
Yuval A.

Reputation: 6089

While trying to output a jpg of a Facebook profile-picture from their Graph API with PHP, I noticed that if the PHP file is saved with UTF-8 encoding - this error was returned, but if the file was saved with ANSI encoding - then it worked OK.

Upvotes: 3

Gordon
Gordon

Reputation: 317049

If you base64 encode the output, you could use the image directly with a Data URI scheme.

<!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>

Note that Data URIs are not supported by all browsers (guess which).

Upvotes: 12

Martin Bean
Martin Bean

Reputation: 39389

I isolated the PHP script into its own file (image.php) and it worked fine: I got a grey rectangle with a black slanted line. Your issue is trying to embed this within a HTML file.

You need the PHP in its own, separate file (as I did, call it image.php or something more description to your needs) and then create a HTML file as follows:

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

You should get your desired output then.

Upvotes: 2

Noufal Ibrahim
Noufal Ibrahim

Reputation: 72765

You should output only the image. You are outputting a bunch of tags. Specifically

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

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

and then the image as a binary. If you want to see this, wget the page from your server and try opening it in an editor. Your code should start at the <?php.

Removing the header gets rid of the notification to the client that this is an image so it will try out print it out as text.

Upvotes: 3

Shane Reustle
Shane Reustle

Reputation: 8952

This is all you need. You can not print anything else because it needs to look like it's own file. You could call this image.php and pass it a variable to define which image to output.

<?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);
?>

Upvotes: 2

Related Questions