spdwrench Posted August 7, 2007 Share Posted August 7, 2007 I am using a function I just downloaded to resize and brand some text to an image... I was so happy I finally got this working... but after repeated tries it started failing.... would not return the resized image.... I dont think it is setup to show me an error as to why..... anyway it was resizing any image greater than 800 x 600 and then putting my site title on the top of the image in white text... this all works so well but only works intermitantly.... I actually had the same picture work one time but not the next... Am I running out of memory somewhere? is there an image not being destroyed somewhere? causing a memory issue? my php memory is set to 32M (is that enough? I would think so) here is the page that calls the function <?php //resize if too big + watermark // call to function $file_source is the location of the upload file $size is the original size of uploaded file... include("engine/ImageEditor.php"); if ($size[0] > $max_image_width||$size[1]>$max_image_height) { $imageEditor = new ImageEditor($file_source, "photos/"); if ($size[0]>$size[1]){$imageEditor->resize(800,600); $dtw=30;} else {$imageEditor->resize(450,600); $dtw=17;} $imageEditor->outputFile($file_source, "photos/"); } // text follows if($dtw==0){$dtw=($size[0]/25);} $imageEditor = new ImageEditor($file_source, "photos/"); $imageEditor->setFont("engine/pages/georgia.ttf"); $imageEditor->setSize($dtw); // Following line is text going on picture starting position 50 x 10 y color white 255 255 255 $imageEditor->addText("ABMATCH.COM FREE DATING",10 , 50,array (255,255,255)); $imageEditor->outputFile($file_source, "photos/"); $dtw=0; // End resize image and watermark ?> the function being called by this bit of code is below: <?php class ImageEditor { var $x; var $y; var $type; var $img; var $font; var $error; var $size; ######################################################## # CONSTRUCTOR ######################################################## function ImageEditor($filename, $path, $col=NULL) { $this->font = false; $this->error = false; $this->size = 25; if(is_numeric($filename) && is_numeric($path)) ## IF NO IMAGE SPECIFIED CREATE BLANK IMAGE { $this->x = $filename; $this->y = $path; $this->type = "jpg"; $this->img = imagecreatetruecolor($this->x, $this->y); if(is_array($col)) ## SET BACKGROUND COLOUR OF IMAGE { $colour = ImageColorAllocate($this->img, $col[0], $col[1], $col[2]); ImageFill($this->img, 0, 0, $colour); } } else ## IMAGE SPECIFIED SO LOAD THIS IMAGE { ## FIRST SEE IF WE CAN FIND IMAGE if(file_exists($path . $filename)) { $file = $path . $filename; } else if (file_exists($path . "/" . $filename)) { $file = $path . "/" . $filename; } else { $this->errorImage("File Could Not Be Loaded"); } if(!($this->error)) { ## LOAD OUR IMAGE WITH CORRECT FUNCTION $this->type = strtolower(end(explode('.', $filename))); if ($this->type == 'jpg' || $this->type == 'jpeg') { $this->img = @imagecreatefromjpeg($file); } else if ($this->type == 'png') { $this->img = @imagecreatefrompng($file); } else if ($this->type == 'gif') { $this->img = @imagecreatefrompng($file); } ## SET OUR IMAGE VARIABLES $this->x = imagesx($this->img); $this->y = imagesy($this->img); } } } ######################################################## # RESIZE IMAGE GIVEN X AND Y ######################################################## function resize($width, $height) { if(!$this->error) { $tmpimage = imagecreatetruecolor($width, $height); imagecopyresampled($tmpimage, $this->img, 0, 0, 0, 0, $width, $height, $this->x, $this->y); imagedestroy($this->img); $this->img = $tmpimage; $this->y = $height; $this->x = $width; } } ######################################################## # CROPS THE IMAGE, GIVE A START CO-ORDINATE AND # LENGTH AND HEIGHT ATTRIBUTES ######################################################## function crop($x, $y, $width, $height) { if(!$this->error) { $tmpimage = imagecreatetruecolor($width, $height); imagecopyresampled($tmpimage, $this->img, 0, 0, $x, $y, $width, $height, $width, $height); imagedestroy($this->img); $this->img = $tmpimage; $this->y = $height; $this->x = $width; } } ######################################################## # ADDS TEXT TO AN IMAGE, TAKES THE STRING, A STARTING # POINT, PLUS A COLOR DEFINITION AS AN ARRAY IN RGB MODE ######################################################## function addText($str, $x, $y, $col) { if(!$this->error) { if($this->font) { $colour = ImageColorAllocate($this->img, $col[0], $col[1], $col[2]); if(!imagettftext($this->img, $this->size, 0, $x, $y, $colour, $this->font, $str)) { $this->font = false; $this->errorImage("Error Drawing Text"); } } else { $colour = ImageColorAllocate($this->img, $col[0], $col[1], $col[2]); Imagestring($this->img, 5, $x, $y, $str, $colour); } } } function shadowText($str, $x, $y, $col1, $col2, $offset=2) { $this->addText($str, $x, $y, $col1); $this->addText($str, $x-$offset, $y-$offset, $col2); } ######################################################## # ADDS A LINE TO AN IMAGE, TAKES A STARTING AND AN END # POINT, PLUS A COLOR DEFINITION AS AN ARRAY IN RGB MODE ######################################################## function addLine($x1, $y1, $x2, $y2, $col) { if(!$this->error) { $colour = ImageColorAllocate($this->img, $col[0], $col[1], $col[2]); ImageLine($this->img, $x1, $y1, $x2, $y2, $colour); } } ######################################################## # RETURN OUR EDITED FILE AS AN IMAGE ######################################################## function outputImage() { if ($this->type == 'jpg' || $this->type == 'jpeg') { header("Content-type: image/jpeg"); imagejpeg($this->img); } else if ($this->type == 'png') { header("Content-type: image/png"); imagepng($this->img); } else if ($this->type == 'gif') { header("Content-type: image/png"); imagegif($this->img); } } ######################################################## # CREATE OUR EDITED FILE ON THE SERVER ######################################################## function outputFile($filename, $path) { if ($this->type == 'jpg' || $this->type == 'jpeg') { imagejpeg($this->img, ($path . $filename)); } else if ($this->type == 'png') { imagepng($this->img, ($path . $filename)); } else if ($this->type == 'gif') { imagegif($this->img, ($path . $filename)); } } ######################################################## # SET OUTPUT TYPE IN ORDER TO SAVE IN DIFFERENT # TYPE THAN WE LOADED ######################################################## function setImageType($type) { $this->type = $type; } ######################################################## # ADDS TEXT TO AN IMAGE, TAKES THE STRING, A STARTING # POINT, PLUS A COLOR DEFINITION AS AN ARRAY IN RGB MODE ######################################################## function setFont($font) { $this->font = $font; } ######################################################## # SETS THE FONT SIZE ######################################################## function setSize($size) { $this->size = $size; } ######################################################## # GET VARIABLE FUNCTIONS ######################################################## function getWidth() {return $this->x;} function getHeight() {return $this->y;} function getImageType() {return $this->type;} ######################################################## # CREATES AN ERROR IMAGE SO A PROPER OBJECT IS RETURNED ######################################################## function errorImage($str) { $this->error = false; $this->x = 235; $this->y = 50; $this->type = "jpg"; $this->img = imagecreatetruecolor($this->x, $this->y); $this->addText("AN ERROR OCCURED:", 10, 5, array(250,70,0)); $this->addText($str, 10, 30, array(255,255,255)); $this->error = true; } } ?> it worked a couple times then started acting up and not producing a resized image.... My smile came right off my face any ideas? Paul Quote Link to comment https://forums.phpfreaks.com/topic/63765-solved-picture-resize-function-only-works-at-times-memory-issue-i-dunno/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.