views:

75

answers:

3

I came up with this:

<?php 

$dir = $_GET['dir'];

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

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, 150, 150); 

imagejpeg($create, null, 100); 

?>

It works by accessing:

http://domain.com/image.php?dir=thisistheimage.jpg

Which works fine... but the output is awful:

alt text

Can someone fix my code for the image to be 150 x 150 covering the black area...

Thanks.

SOLUTION:

<?php 

$dir = $_GET['dir'];

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

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

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 

$newwidth = 150;
$newheight = 150;

imagecopyresized($create, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagejpeg($create, null, 100); 

?>
+4  A: 

Use imagecopyresized:

$newwidth = 150;
$newheight = 150;
imagecopyresized($create, $image, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);
Yuval A
What are the definitions of $oldwidth and $oldheight?
YouBook
whatever they are for your image...
Yuval A
Ah yes of course, sorted it out now, added the solution in the edited post :)
YouBook
No need to add the solution to the post, recommend you remove it.
Yuval A
A: 

The last 2 150 should be the original width and height of the full sized image.

CharlesLeaf
Better left as a comment. This isn't an answer.
stagas
It was a perfectly correct answer on the ORIGINAL unmodified question.
CharlesLeaf
Sorry, I'm trying to undo the down vote but it says it's locked. Still, it's a lazy answer, you should probably delete it.
stagas
It's ok I don't care about the vote down. What makes it a lazy answer, that I didn't write/correct the code for him myself? I don't think that would have helped him at all, yes it would have *worked* but would he have learned what the problem was? I prefer to give gentle pushes in the right direction.
CharlesLeaf
A: 

As others suggested, last two parameters should be original size of the image.

If $dir is your filename, you can use getimagesize to obtain picture's original dimensions.

You can use imagecopyresized or imagecopyresampled. Difference is that imagecopyresized will copy and resize while imagecopyresampled will also resample your image which will yield better quality.

<?php 

$dir = $_GET['dir'];

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

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir);
list($width, $height) = getimagesize($dir);
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height);

imagejpeg($create, null, 100); 

?>
Luc