469,630 Members | 1,221 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,630 developers. It's quick & easy.

Mixing Php's imagecopy and HTML

Hi all,
Sorry for this stupid question, but I am having trouble mixing imagecopy
etc. with HTML.
What I am trying to do is copy an image, and then obtain co-ordinates from a
database which will then be drawn
on the image (to create a clickable imagemap). The image will then be
displayed as part of a webpage.

I've included my code snippet below. It doesn't work, and I think I know
why - the output on my screen
grumbles about the header information already being sent. Is there any way
to do what I want it do?
Perhaps putting the image copy calls in a separate function call?

Sorry for the stupid question, I am new to php.

Best wishes

Paul

<HTML>

<H1>Test...</H1>

<?php

// File and new size

$filename = 'logo_i.JPG';

// Content type

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

// Get new sizes

list($width, $height) = getimagesize($filename);

// Load

$thumb = imagecreatetruecolor($width, $height);

$source = imagecreatefromjpeg($filename);

// Resize

imagecopy($thumb, $source, 0, 0, 0, 0, $width, $height);

imagerectangle($thumb, 10,10,50,50,4500);

// Output

imagejpeg($thumb);

?>

</HTML>
Jan 25 '06 #1
7 2464
d
"Ubantu Rococo" <pa********@baesystems.com> wrote in message
news:43**********@glkas0286.greenlnk.net...
Hi all,
Sorry for this stupid question, but I am having trouble mixing imagecopy
etc. with HTML.
What I am trying to do is copy an image, and then obtain co-ordinates from
a database which will then be drawn
on the image (to create a clickable imagemap). The image will then be
displayed as part of a webpage.

I've included my code snippet below. It doesn't work, and I think I know
why - the output on my screen
grumbles about the header information already being sent. Is there any way
to do what I want it do?
Perhaps putting the image copy calls in a separate function call?

Sorry for the stupid question, I am new to php.

Best wishes

Paul

<HTML>

<H1>Test...</H1>

<?php

// File and new size

$filename = 'logo_i.JPG';

// Content type

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

// Get new sizes

list($width, $height) = getimagesize($filename);

// Load

$thumb = imagecreatetruecolor($width, $height);

$source = imagecreatefromjpeg($filename);

// Resize

imagecopy($thumb, $source, 0, 0, 0, 0, $width, $height);

imagerectangle($thumb, 10,10,50,50,4500);

// Output

imagejpeg($thumb);

?>

</HTML>


I don't think imagejpeg works as you think it does. It outputs an image's
actual binary data, so you're essentially trying to output a jpeg image with
HTML tags before and after it - which won't work. What you need to do, is
put the PHP code only into a file, called say image.php. Then, in your HTML
document (the rest of the code above), just put an image tag in: <img
src="image.php">. That will display the image in the HTML page. You can
even have javascript to work out where you click on the image, and then
update its url like this:

<img src="image.php?x=10&y=22">, and the image.php can then add something at
those co-ordinates to demonstrate it has been selected.

dave
Jan 25 '06 #2
>
I don't think imagejpeg works as you think it does. It outputs an image's
actual binary data, so you're essentially trying to output a jpeg image
with HTML tags before and after it - which won't work. What you need to
do, is put the PHP code only into a file, called say image.php. Then, in
your HTML document (the rest of the code above), just put an image tag in:
<img src="image.php">. That will display the image in the HTML page. You
can even have javascript to work out where you click on the image, and
then update its url like this:

<img src="image.php?x=10&y=22">, and the image.php can then add something
at those co-ordinates to demonstrate it has been selected.

Thanks, I understand now, I think....

Could I just put the imagecopy routine in an external file (called
getWorldMap.php, with the getWorldMap() function contained
within) and then do:

<?php include("getWorldMap.php");

$wm = getWorldMap(); // $wm is the resource,copied from WorldMap

imagejpg($wm);

?>

Jan 25 '06 #3
d
"Ubantu Rococo" <pa********@baesystems.com> wrote in message
news:43**********@glkas0286.greenlnk.net...

I don't think imagejpeg works as you think it does. It outputs an
image's actual binary data, so you're essentially trying to output a jpeg
image with HTML tags before and after it - which won't work. What you
need to do, is put the PHP code only into a file, called say image.php.
Then, in your HTML document (the rest of the code above), just put an
image tag in: <img src="image.php">. That will display the image in the
HTML page. You can even have javascript to work out where you click on
the image, and then update its url like this:

<img src="image.php?x=10&y=22">, and the image.php can then add something
at those co-ordinates to demonstrate it has been selected.

Thanks, I understand now, I think....

Could I just put the imagecopy routine in an external file (called
getWorldMap.php, with the getWorldMap() function contained
within) and then do:

<?php include("getWorldMap.php");

$wm = getWorldMap(); // $wm is the resource,copied from WorldMap

imagejpg($wm);

?>


You could indeed. That script would output the jpeg, so it has to be on its
own, and with the correct header sent. I think if you're not going to be
using the code anywhere else, just keep it in one flat file. That would
make it a lot easier to comprehend ;)

Also, remember to call imagedestroy() on your image handles to free up the
memory they use. Otherwise you might find yourself running out of resources
on your webserver, if its not tidying up after itself.

dave
Jan 25 '06 #4

"d" <d@example.com> wrote in message
news:m5****************@text.news.blueyonder.co.uk ...
"Ubantu Rococo" <pa********@baesystems.com> wrote in message
news:43**********@glkas0286.greenlnk.net...
>
I don't think imagejpeg works as you think it does. It outputs an
image's actual binary data, so you're essentially trying to output a
jpeg image with HTML tags before and after it - which won't work. What
you need to do, is put the PHP code only into a file, called say
image.php. Then, in your HTML document (the rest of the code above),
just put an image tag in: <img src="image.php">. That will display the
image in the HTML page. You can even have javascript to work out where
you click on the image, and then update its url like this:

<img src="image.php?x=10&y=22">, and the image.php can then add
something at those co-ordinates to demonstrate it has been selected.

Thanks, I understand now, I think....

Could I just put the imagecopy routine in an external file (called
getWorldMap.php, with the getWorldMap() function contained
within) and then do:

<?php include("getWorldMap.php");

$wm = getWorldMap(); // $wm is the resource,copied from WorldMap

imagejpg($wm);

?>


You could indeed. That script would output the jpeg, so it has to be on
its own, and with the correct header sent. I think if you're not going to
be using the code anywhere else, just keep it in one flat file. That
would make it a lot easier to comprehend ;)

Also, remember to call imagedestroy() on your image handles to free up the
memory they use. Otherwise you might find yourself running out of
resources on your webserver, if its not tidying up after itself.

dave

Thanks mate.
I've tried it, but the getWorldMap() function doesn't seem to work! I either
get the raw binary data of the jpg
and an error about the header (if I leave the header(...) function in
below), or just the raw data if I leave out the f
function.

This is my file getWorldMap.php
<?php

function getWorldMap()

{

// File and new size

$filename = 'logo_i.JPG';

// Content type

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

// Get new sizes

list($width, $height) = getimagesize($filename);

// Load

$thumb = imagecreatetruecolor($width, $height);

$source = imagecreatefromjpeg($filename);

// Resize

imagecopy($thumb, $source, 0, 0, 0, 0, $width, $height);

// Output

return $thumb;

}

?>
Jan 25 '06 #5
Ubantu Rococo wrote:
Thanks mate.
I've tried it, but the getWorldMap() function doesn't seem to work! I either
get the raw binary data of the jpg
and an error about the header (if I leave the header(...) function in
below), or just the raw data if I leave out the f
function.

[snip]

Are you trying to do this?

<html>
<h1>Test...</h1>
<?php
include("getWorldMap.php");
$wm = getWorldMap();
imagejpg($wm);
?>
</h1>

As Dave already explained, this won't work. Here's what you can do:
move the call to imagejpg() into getWorldMap.php, and then move the
image generation code out of the getWorldMap() function and into the
top level of getWorldMap.php. Then, in your main page, do something
like this:

<html>
<h1>Test...</h1>
<img src="getWorldMap.php">
</html>

-- David

Jan 25 '06 #6
NC
Ubantu Rococo wrote:

I am having trouble mixing imagecopy etc. with HTML.


For a good reason; you're not supposed to do that.

You can have a script that generates HTML; if you want your script to
output an image, you must make it separate from scripts that generate
HTML. Something like this:

<img src="picture.php?input1=abcd&input2=78">

Then picture.php can generate the image you want based on inputs you
specify...

Cheers,
PHP

Jan 25 '06 #7
NC
Ubantu Rococo wrote:

I am having trouble mixing imagecopy etc. with HTML.


For a good reason; you're not supposed to do that.

You can have a script that generates HTML; if you want your script to
output an image, you must make it separate from scripts that generate
HTML. Something like this:

<img src="picture.php?input1=abcd&input2=78">

Then picture.php can generate the image you want based on inputs you
specify...

Cheers,
NC

Jan 25 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by philphanluvr | last post: by
6 posts views Thread by Jeff | last post: by
5 posts views Thread by IWT | last post: by
9 posts views Thread by Jan | last post: by
3 posts views Thread by Chuck Renner | last post: by
reply views Thread by mechphisto | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.