Im having a problem with this script, the quality of the thumbnails looks very grainy. I tried adding truecolour but it makes no difference. Any help would be appreciated. Regards Mike <?php error_reporting(0); $val = $_GET['sid']; mkdir("images/storyimg/$val/", 0777); $idir = "images/storyimg/$val"; // Path To Images Directory $tdir = "images/storyimg/$val/$val"; // Path To Thumbnails Directory $twidth = "180"; // Maximum Width For Thumbnail Images $theight = "180"; // Maximum Height For Thumbnail Images if (!isset($_GET['subpage'])) { // Image Upload Form Below ?> <form method="post" action="addphoto.php?subpage=upload" enctype="multipart/form-data"> File:<br /> <input type="file" name="imagefile" class="form"> <br /><br /> <input name="submit" type="submit" value="Sumbit" class="form"> <input type="reset" value="Clear" class="form"> </form> <? } else if (isset($_GET['subpage']) && $_GET['subpage'] == 'upload') { // Uploading/Resizing Script $url = $_FILES['imagefile']['name']; // Set $url To Equal The Filename For Later Use if ($_FILES['imagefile']['type'] == "image/jpg" || $_FILES['imagefile']['type'] == "image/jpeg" || $_FILES['imagefile']['type'] == "image/pjpeg") { $file_ext = strrchr($_FILES['imagefile']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php $copy = copy($_FILES['imagefile']['tmp_name'], "$idir" . $_FILES['imagefile']['name']); // Move Image From Temporary Location To Permanent Location if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location print 'Image uploaded successfully.<br /><a href="javascript: history.go(-1)">Go Back</a>'; // Was Able To Successfully Upload Image $simg = imagecreatefromjpeg("$idir" . $url); // Make A New Temporary Image To Create The Thumbanil From $currwidth = imagesx($simg); // Current Image Width $currheight = imagesy($simg); // Current Image Height if ($currheight > $currwidth) { // If Height Is Greater Than Width $zoom = $twidth / $currheight; // Length Ratio For Width $newheight = $theight; // Height Is Equal To Max Height $newwidth = $currwidth * $zoom; // Creates The New Width } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) $zoom = $twidth / $currwidth; // Length Ratio For Height $newwidth = $twidth; // Width Is Equal To Max Width $newheight = $currheight * $zoom; // Creates The New Height } $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail imagetruecolortopalette($simg, true, 16777216); // Create New Color Pallete $palsize = ImageColorsTotal($simg); for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use } imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) imagejpeg($dimg, "$tdir" . $url); // Saving The Image imagedestroy($simg); // Destroying The Temporary Image imagedestroy($dimg); // Destroying The Other Temporary Image print 'Image thumbnail created successfully.'; // Resize successful } else { print '<font color="#FF0000">ERROR: Unable to upload image.</font>'; // Error Message If Upload Failed } } else { print '<font color="#FF0000">ERROR: Wrong filetype (has to be a .jpg or .jpeg. Yours is '; // Error Message If Filetype Is Wrong print $file_ext; // Show The Invalid File's Extention print '.</font>'; } } ?> PHP:
Hi Darksat, why try to reinvent the wheel? You can achieve the same with much less code and PEAR, just to let you know. HTTP_Upload Image_Transform: <?php require_once 'Image/Transform.php'; $i =& Image_Transform::factory(''); $i->load('test.jpg'); $i->fit(100,100); $i->save('resized.png', 'png'); ?> PHP: Hope it helps.
Bump. Im sure its something fairly simple but the existing code works fine appart from the image pixelation.
I think what's happening is you're loading a JPEG and then converting it to a palette based image, then still outputting it as JPEG... $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail imagetruecolortopalette($simg, true, 16777216); // Create New Color Pallete $palsize = ImageColorsTotal($simg); for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use } PHP: to $dimg = imagecreatetruecolor($newwidth, $newheight); // Make New Image For Thumbnail PHP: should fix it. Also try imagecopyresampled instead of imagecopyresized
should be $zoom = $theight / $currheight; // Length Ratio For Width otherwise your reduced pictures will be out of proportion