Hello Frnds, I am receiving this error while croping the image.. GD2 is installed, function ImageCreateTruecolor() exists, but image is not created file=/var/www/vhosts/domain.com/httpdocs/lib/hft_image.php Finally I get the cropped image, but this error exists.. Any idea?
Can you copy-paste the code here? ImageCreateTruecolor need 2 parameters, width and height. Are you sure the image width and height are right?
This is my code: <?PHP /*********************************************************************************************** Purpose: class to handle image resize; can output to file or directly to browser version 5.2 Author: Yuriy Horobey, yuriy@horobey.com Property: SmiledSoft.com URL: http://smiledsoft.com/demos/ Date: 27.08.2004 ***********************************************************************************************/ require("hft_image_errors.php"); // here you can include your own language error file //this class works with image class hft_image { var $image_original; var $file_original; var $image_original_width; var $image_original_height; var $image_original_type_code; var $image_original_type_abbr; var $image_original_html_sizes; var $image_resized; var $file_resized; var $image_resized_width; var $image_resized_height; var $image_resized_type_code; var $image_resized_type_abbr; var $image_resized_html_sizes; //some settings var $jpeg_quality; var $use_gd2; function hft_image($file_original){ //constructor of the class //it takes given file and creates image out of it global $ERR; $this->clear(); // clear all. if(file_exists($file_original)) { $this->file_original = $file_original; $this->image_original = $this->imagecreatefromfile($file_original); if(!$this->image_original){ $this->error($ERR["IMAGE_NOT_CREATED_FROM_FILE"]." file=$file_original"); return false; } } else { $this->error($ERR["FILE_DOESNOT_EXSIT"]." file=$file_original"); } } function clear() { // clear all the class member varaibles $this->image_original = 0; $this->file_original = ""; $this->image_original_width = 0; $this->image_original_height = 0; $this->image_original_type_code = 0; $this->image_original_type_abbr = ""; $this->image_original_html_sizes= ""; $this->image_resized = 0; $this->file_resized = ""; $this->image_resized_width = 0; $this->image_resized_height = 0; $this->image_resized_type_code = -1; $this->image_resized_type_abbr = ""; $this->image_resized_html_sizes = ""; $this->set_parameters(); } function set_parameters($jpeg_quality="85", $use_gd2=true) { $this->jpeg_quality=$jpeg_quality; $this->use_gd2=$use_gd2; } function error($msg){ //error messages and debug info: // here you can implement your own error handling echo("<hr color='red'><font color='red'><b>$msg</b></font><br> file=<b>".__FILE__."</b><hr color='red'>"); } function imagecreatefromfile($img_file){ global $ERR; $img=0; $img_sz = getimagesize( $img_file ); ## returns array with some properties like dimensions and type; ####### Now create original image from uploaded file. Be carefull! GIF is often not supported, as far as I remember from GD 1.6 switch( $img_sz[2] ){ case 1: $img = $this->_imagecheckandcreate("ImageCreateFromGif", $img_file); $img_type = "GIF"; break; case 2: $img = $this->_imagecheckandcreate("ImageCreateFromJpeg", $img_file); $img_type = "JPG"; break; case 3: $img = $this->_imagecheckandcreate("ImageCreateFromPng", $img_file); $img_type = "PNG"; break; // would be nice if this function will be finally supported case 4: $img = $this->_imagecheckandcreate("ImageCreateFromSwf", $img_file); $img_type = "SWF"; break; default: $img = 0; $img_type = "UNKNOWN"; $this->error($ERR["IMG_NOT_SUPPORTED"]." $img_file"); break; }//case if($img){ $this->image_original_width=$img_sz[0]; $this->image_original_height=$img_sz[1]; $this->image_original_type_code=$img_sz[2]; $this->image_original_type_abbr=$img_type; $this->image_original_html_sizes=$img_sz[3]; }else { $this->clear(); } return $img; } function _imagecheckandcreate($function, $img_file) { //inner function used from imagecreatefromfile(). //Checks if the function exists and returns //created image or false global $ERR; if(function_exists($function)) { $img = $function($img_file); }else{ $img = false; $this->error($ERR["FUNCTION_DOESNOT_EXIST"]." ".$function); } return $img; } function resize($desired_width, $desired_height, $mode="-"){ //this is core function--it resizes created image //if any of parameters == "*" then no resizing on this parameter //>> mode = "+" then image is resized to cover the region specified by desired_width, _height //>> mode = "-" then image is resized to fit into the region specified by desired_width, _height // width-to-height ratio is all the time the same //>>mode=0 then image will be exactly resized to $desired_width _height. //geometrical distortion can occur in this case. // say u have picture 400x300 and there is circle on the picture //now u resized in mode=0 to 800x300 -- circle shape will be distorted and will look like ellipse. //GD2 provides much better quality but is not everywhere installed global $ERR; if($desired_width == "*" && $desired_height == "*"){ $this->image_resized = $this->image_original; Return true; } switch($mode) { case "-": case '+': //multipliers if($desired_width != "*") $mult_x = $desired_width / $this->image_original_width; if($desired_height != "*") $mult_y = $desired_height / $this->image_original_height; $ratio = $this->image_original_width / $this->image_original_height; if($desired_width == "*"){ $new_height = $desired_height; $new_width = $ratio * $desired_height; }elseif($desired_height == "*"){ $new_height = $desired_width / $ratio; $new_width = $desired_width; }else{ if($mode=="-"){ if( $this->image_original_height * $mult_x < $desired_height ){ //image must be smaller than given $desired_ region //test which multiplier gives us best result //$mult_x does the job $new_width = $desired_width; $new_height = $this->image_original_height * $mult_x; }else{ //$mult_y does the job $new_width = $this->image_original_width * $mult_y; $new_height = $desired_height; } }else{ //mode == "+" // cover the region //image must be bigger than given $desired_ region //test which multiplier gives us best result if( $this->image_original_height * $mult_x > $desired_height ){ //$mult_x does the job $new_width = $desired_width; $new_height = $this->image_original_height * $mult_x; }else{ //$mult_y does the job $new_width = $this->image_original_width * $mult_y; $new_height = $desired_height; } } } break; case '0': //fit the region exactly. if($desired_width == "*") $desired_width = $this->image_original_width; if($desired_height == "*") $desired_height = $this->image_original_height; $new_width = $desired_width; $new_height = $desired_height; break; default: $this->error($ERR["UNKNOWN_RESIZE_MODE"]." $mode"); break; } // OK here we have $new_width _height //create destination image checking for GD2 functions: if( $this->use_gd2 ){ if( function_exists("imagecreatetruecolor")){ $this->image_resized = imagecreatetruecolor($new_width, $new_height) or $this->error($ERR["GD2_NOT_CREATED"]); }else { $this->error($ERR["GD2_UNAVALABLE"]." ImageCreateTruecolor()"); } } else { $this->image_resized = imagecreate($new_width, $new_height) or $this->error($ERR["IMG_NOT_CREATED"]); } //Resize if( $this->use_gd2 ){ if( function_exists("imagecopyresampled")){ // Added by Dipan for PNG transparant image. if($this->image_original_type_abbr == "PNG") { imagealphablending($this->image_resized, false); imagesavealpha($this->image_resized,true); $transparent = imagecolorallocatealpha($this->image_resized, 255, 255, 255, 127); imagefilledrectangle($this->image_resized, 0, 0, $new_width, $new_height, $transparent); } $res = imagecopyresampled($this->image_resized, $this->image_original, 0, 0, //dest coord 0, 0, //source coord $new_width, $new_height, //dest sizes $this->image_original_width, $this->image_original_height // src sizes ) or $this->error($ERR["GD2_NOT_RESIZED"]); }else { $this->error($ERR["GD2_UNAVALABLE"]." ImageCopyResampled()"); } } else { $res = imagecopyresized($this->image_resized, $this->image_original, 0, 0, //dest coord 0, 0, //source coord $new_width, $new_height, //dest sizes $this->image_original_width, $this->image_original_height // src sizes ) or $this->error($ERR["IMG_NOT_RESIZED"]); } } function output_original($destination_file, $image_type="JPG") { //outputs original image //if destination file is empty image will be output to browser // right now $image_type can be JPG or PNG return _output_image($destination_file, $image_type, $this->image_original); } function output_resized($destination_file, $image_type="JPG") { //if destination file is empty image will be output to browser // right now $image_type can be JPG or PNG $res = $this->_output_image($destination_file, $image_type, $this->image_resized); if(trim($destination_file)){ $sz=getimagesize($destination_file); $this->file_resized = $destination_file; $this->image_resized_width = $sz[0]; $this->image_resized_height = $sz[1]; $this->image_resized_type_code=$sz[2]; $this->image_resized_html_sizes=$sz[3]; //only jpeg and png are really supported, but I'd like to think of future switch($this->image_resized_html_sizes){ case 0: $this->image_resized_type_abbr = "GIF"; break; case 1: $this->image_resized_type_abbr = "JPG"; break; case 2: $this->image_resized_type_abbr = "PNG"; break; case 3: $this->image_resized_type_abbr = "SWF"; break; default: $this->image_resized_type_abbr = "UNKNOWN"; break; } } return $res; } function _output_image($destination_file, $image_type, $image){ //if destination file is empty image will be output to browser // right now $image_type can be JPEG or PNG global $ERR; $destination_file = trim($destination_file); $res = false; if($image){ switch($image_type) { case 'JPEG': case 'JPG': if(!$destination_file) header("Content-type: image/jpeg"); $res = ImageJpeg($image, $destination_file, $this->jpeg_quality); break; case 'PNG': if(!$destination_file) header("Content-type: image/png"); $res = Imagepng($image, $destination_file); break; case 'GIF': if(!$destination_file) header("Content-type: image/gif"); $res = Imagegif($image, $destination_file); break; default: $this->error($ERR["UNKNOWN_OUTPUT_FORMAT"]." $image_type"); break; } }else{ $this->error($ERR["NO_IMAGE_FOR_OUTPUT"]); } if(!$res) $this->error($ERR["UNABLE_TO_OUTPUT"]." $destination_file"); return $res; } } ?> PHP: and These are errrors: <?PHP $ERR["UNABLE_TO_OUTPUT"] = "Unable to output: "; $ERR["FILE_DOESNOT_EXSIT"] = "This file does not exist: "; $ERR["FUNCTION_DOESNOT_EXIST"] = "This function does not exist: "; $ERR["GD2_NOT_CREATED"] = "GD2 is installed, function ImageCreateTruecolor() exists, but image is not created"; $ERR["IMG_NOT_CREATED"] = "Image is not created ImageCreate(). {GD2 suppor is OFF}"; $ERR["GD2_UNAVALABLE"] = "You specified to use GD2, but not all GD2 functions are present."; $ERR["GD2_NOT_RESIZED"] = "GD2 is installed, function ImageCopyResampled() exists, but image is not resized"; $ERR["IMG_NOT_RESIZED"] = "Image was not resized. {GD2 suppor is OFF}"; $ERR["UNKNOWN_OUTPUT_FORMAT"] = "This image format cannot be output: "; $ERR["NO_IMAGE_FOR_OUTPUT"] = "Image you are trying to output does not exist. "; $ERR["IMG_NOT_SUPPORTED"] = "Can not create image. Sorry, this image type is not supported yet."; ?> PHP:
well another reason can be that php-gd is not installed.. php-gd allows gd to work with php on centos / rhel type in : yum install php-gd and then restart apache.