Temujin_12 Posted September 20, 2007 Share Posted September 20, 2007 The server I was hosting my site on (for free so I can't complain too much) crashed and the administrators migrated to a new server. PHP 4.3.2 is on the new server (can't remember what was on the old). I have the following script which thumbnails and/or watermarks an image and outputs it back to the browser: <?php ini_set("memory_limit", "16M"); // watermarks an image // params $sourcefile - image to watermark (gd resource or filename) // $watermarkfile - image to use as watermark (gd resource or filename) // $fileType - type of image ('gif', 'png', 'jpg') // returns gd image resource // NOTE: if passing resource for $sourcefile you must also pass 3rd parameter function watermark(&$sourcefile, &$watermarkfile, $fileType="") { // either create GD resource from path to png, or use passed in GD resource if (gettype($watermarkfile) == "string") $watermarkfile_id = imagecreatefrompng($watermarkfile); else $watermarkfile_id = $watermarkfile; imageAlphaBlending($watermarkfile_id, false); imageSaveAlpha($watermarkfile_id, true); // either create GD resource from path to src image, or use passed in GD resource if (gettype($sourcefile) == "string") { $fileType = strtolower(substr($sourcefile, strlen($sourcefile)-3)); switch($fileType) { case('gif'): $sourcefile_id = imagecreatefromgif($sourcefile); break; case('png'): $sourcefile_id = imagecreatefrompng($sourcefile); break; default: $sourcefile_id = imagecreatefromjpeg($sourcefile); } // end switch } // end if else $sourcefile_id = $sourcefile; //Get the sizes of both pix $sourcefile_width=imageSX($sourcefile_id); $sourcefile_height=imageSY($sourcefile_id); $watermarkfile_width=imageSX($watermarkfile_id); $watermarkfile_height=imageSY($watermarkfile_id); $dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 ); $dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 ); // if a gif, we have to upsample it to a truecolor image if ($fileType == 'gif') { // create an empty truecolor container $tempimage = imagecreatetruecolor($sourcefile_width, $sourcefile_height); // copy the 8-bit gif into the truecolor image imagecopy($tempimage, $sourcefile_id, 0, 0, 0, 0, $sourcefile_width, $sourcefile_height); // copy the source_id int $sourcefile_id = $tempimage; } // end if imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0, $watermarkfile_width, $watermarkfile_height); return $sourcefile_id; } // end watermark function // proportionally resizes image to fit into $max_width AND $max_height // params: $resource - filename<string> or gd image resource of image to resize // $max_width - <int> // $max_height - <int> // returns gd image resource of resulting resized image function resizeImage(&$resource, $max_width, $max_height) { if (gettype($resource) == "string") list($orig_width, $orig_height) = getimagesize($resource); else { $orig_width = imagesx($resource); $orig_height = imagesy($resource); } // end else $width = $orig_width; $height = $orig_height; # taller if ($height > $max_height) { $width = ($max_height / $height) * $width; $height = $max_height; } // end if # wider if ($width > $max_width) { $height = ($max_width / $width) * $height; $width = $max_width; } // end if $image_p = imagecreatetruecolor($width, $height); // if filename passed in then load gd resource if (gettype($resource) == "string") { $fileType = strtolower(substr($resource, strlen($resource)-3)); switch ($fileType) { case('gif'): $resource = imagecreatefromgif($resource); break; case('png'): $resource = imagecreatefrompng($resource); break; default: $resource = imagecreatefromjpeg($resource); } // end switch } // end if imagecopyresampled($image_p, $resource, 0, 0, 0, 0, $width, $height, $orig_width, $orig_height); return $image_p; } // end resizeImage // do resizing and watermarking if ($_GET) { // get full server path to image require_once 'DataObject_Connect.php'; require_once 'DataObjects/Session.php'; $session = new DataObjects_Session(); $session->get($_GET['session_id']); $image_src = $session->getImagePath($_GET['filename'], true); // determine resizing switch ($_GET['size']) { case 'thumb': $resource = resizeImage($image_src, 100, 100); break; case 'regular': $resource = resizeImage($image_src, 292, 292); break; default: $watermark_src = $_SERVER["DOCUMENT_ROOT"]."/images/watermark.png"; $resource = watermark($image_src, $watermark_src); } // end switch // output header("Content-type: image/jpg"); imagejpeg ($resource, "", 100); } // end if ?> It worked on the old server but doesn't on the new server (PHP 4.3.2). It looks like it is outputting data (ie: when I view the source it has binary data), but the images show up as broken and if I save it out to a file (either on the user using imagejpeg($resource, "/path/to/file", 100) or saving from the browser) any image manipulation program I try is unable to view it. Any ideas as to why the above script wouldn't work for PHP 4.3.2? I'm open to completely replacing my resizing/watermarking routines as long as they are functionally equivalent. Link to comment https://forums.phpfreaks.com/topic/70057-image-thumbnailwatermark-broken-in-php-432/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.