Here I’m coming up with a new PHP class, which will help you to convert any uploaded image to JPG, PNG and GIF.
Class name: image_converter.php
<?php /*** * Image converter Script by Agurchand * Find the script at Theonlytutorials.com * * convert_image() has 3 mandatory parameters * $convert_type => accepts string either 'png', 'jpg' or 'gif' * $target_dir => it is the source as well as the target directory * $image_name => give the actual image name such as 'image1.jpg' * * //optional parameter * $image_quality => can be adjusted, if you don't want 100% quality * * upload_image() is the upload image handler, if you don't have an upload script, you can use this! * * you can edit this script as per your requirement * if you are going to re-produce the script, please mention the original script from 'theonlytutorials.com' ***/ class Image_converter{ //image converter function convert_image($convert_type, $target_dir, $image_name, $image_quality=100){ $target_dir = "$target_dir/"; $image = $target_dir.$image_name; //remove extension from image; $img_name = $this->remove_extension_from_image($image); //to png if($convert_type == 'png'){ $binary = imagecreatefromstring(file_get_contents($image)); //third parameter for ImagePng is limited to 0 to 9 //0 is uncompressed, 9 is compressed //so convert 100 to 2 digit number by dividing it by 10 and minus with 10 $image_quality = floor(10 - ($image_quality / 10)); ImagePNG($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } //to jpg if($convert_type == 'jpg'){ $binary = imagecreatefromstring(file_get_contents($image)); imageJpeg($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } //to gif if($convert_type == 'gif'){ $binary = imagecreatefromstring(file_get_contents($image)); imageGif($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } return false; } //image upload handler public function upload_image($files, $target_dir, $input_name){ $target_dir = "$target_dir/"; //get the basename of the uploaded file $base_name = basename($files[$input_name]["name"]); //get the image type from the uploaded image $imageFileType = $this->get_image_type($base_name); //set dynamic name for the uploaded file $new_name = $this->get_dynamic_name($base_name, $imageFileType); //set the target file for uploading $target_file = $target_dir . $new_name; // Check uploaded is a valid image $validate = $this->validate_image($files[$input_name]["tmp_name"]); if(!$validate){ echo "Doesn't seem like an image file :("; return false; } // Check file size - restrict if greater than 1 MB $file_size = $this->check_file_size($files[$input_name]["size"], 1000000); if(!$file_size){ echo "You cannot upload more than 1MB file"; return false; } // Allow certain file formats $file_type = $this->check_only_allowed_image_types($imageFileType); if(!$file_type){ echo "You cannot upload other than JPG, JPEG, GIF and PNG"; return false; } if (move_uploaded_file($files[$input_name]["tmp_name"], $target_file)) { //return new image name and image file type; return array($new_name, $imageFileType); } else { echo "Sorry, there was an error uploading your file."; } } protected function get_image_type($target_file){ $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); return $imageFileType; } protected function validate_image($file){ $check = getimagesize($file); if($check !== false) { return true; } return false; } protected function check_file_size($file, $size_limit){ if ($file > $size_limit) { return false; } return true; } protected function check_only_allowed_image_types($imagetype){ if($imagetype != "jpg" && $imagetype != "png" && $imagetype != "jpeg" && $imagetype != "gif" ) { return false; } return true; } protected function get_dynamic_name($basename, $imagetype){ $only_name = basename($basename, '.'.$imagetype); // remove extension $combine_time = $only_name.'_'.time(); $new_name = $combine_time.'.'.$imagetype; return $new_name; } protected function remove_extension_from_image($image){ $extension = $this->get_image_type($image); //get extension $only_name = basename($image, '.'.$extension); // remove extension return $only_name; } } ?>
See the Demo or Download the PHP image converter script here:
Converter Function in the Image_converter class is:
//image converter function convert_image($convert_type, $target_dir, $image_name, $image_quality=100){ $target_dir = "$target_dir/"; $image = $target_dir.$image_name; //remove extension from image; $img_name = $this->remove_extension_from_image($image); //to png if($convert_type == 'png'){ $binary = imagecreatefromstring(file_get_contents($image)); //third parameter for ImagePng is limited to 0 to 9 //0 is uncompressed, 9 is compressed //so convert 100 to 2 digit number by dividing it by 10 and minus with 10 $image_quality = floor(10 - ($image_quality / 10)); ImagePNG($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } //to jpg if($convert_type == 'jpg'){ $binary = imagecreatefromstring(file_get_contents($image)); imageJpeg($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } //to gif if($convert_type == 'gif'){ $binary = imagecreatefromstring(file_get_contents($image)); imageGif($binary, $target_dir.$img_name.'.'.$convert_type, $image_quality); return $img_name.'.'.$convert_type; } return false; }
convert_image() has 3 mandatory parameters
* $convert_type => accepts string either ‘png’, ‘jpg’ or ‘gif’
* $target_dir => it is the source as well as the target directory
* $image_name => give the actual image name such as ‘image1.jpg’
*
* //optional parameter
* $image_quality => can be adjusted, if you don’t want 100% quality
Here is the complete usage of the above PHP class, which includes image upload and image conversion script.
index.php – Uploads the image.
<?php //import the converter class require('image_converter.php'); if($_FILES){ $obj = new Image_converter(); //call upload function and send the $_FILES, target folder and input name $upload = $obj->upload_image($_FILES, 'uploads', 'fileToUpload'); if($upload){ $imageName = urlencode($upload[0]); $imageType = urlencode($upload[1]); if($imageType == 'jpeg'){ $imageType = 'jpg'; } header('Location: convert.php?imageName='.$imageName.'&imageType='.$imageType); } } ?> <html> <head> <style> body{ background: lightgray; } table{ margin-top: 200px; background: white; } </style> <script> function checkEmpty(){ var img = document.getElementById('fileToUpload').value; if(img == ''){ alert('Please upload an image'); return false; } return true; } </script> </head> <body> <table width="500" align="center"> <tr><td align="center"> <h2 align="center">Image Uploader & Converter by Theonlytutorials.com</h2></td></tr> <tr><td align="center"><h4>Convert Any image to JPG, PNG, GIF</h4></td></th> <tr> <td align="center"> <form action="" enctype="multipart/form-data" method="post" onsubmit="return checkEmpty()" /> <input type="file" name="fileToUpload" id="fileToUpload" /> <input type="submit" value="Upload" /> </form> </td> </tr> </table> </body> </html>
convert.php – Converts the image.
<?php //import the converter class require('image_converter.php'); $imageType = ''; $download = false; //handle get method, when page redirects if($_GET){ $imageType = urldecode($_GET['imageType']); $imageName = urldecode($_GET['imageName']); }else{ header('Location:index.php'); } //handle post method when the form submitted if($_POST){ $convert_type = $_POST['convert_type']; //create object of image converter class $obj = new Image_converter(); $target_dir = 'uploads'; //convert image to the specified type $image = $obj->convert_image($convert_type, $target_dir, $imageName); //if converted activate download link if($image){ $download = true; } } //convert types $types = array( 'png' => 'PNG', 'jpg' => 'JPG', 'gif' => 'GIF', ); ?> <html> <head> <style> img{ max-width: 360px; } body{ background: lightgray; } </style> </head> <body> <?php if(!$download) {?> <form method="post" action=""> <table width="500" align="center"> <tr> <td align="center"> File Uploaded, Select below option to convert! <img src="uploads/<?=$imageName;?>" /> </td> </tr> <tr> <td align="center"> Convert To: <select name="convert_type"> <?php foreach($types as $key=>$type) {?> <?php if($key != $imageType){?> <option value="<?=$key;?>"><?=$type;?></option> <?php } ?> <?php } ?> </select> <br /><br /> </td> </tr> <tr> <td align="center"><input type="submit" value="convert" /></td> </tr> </table> </form> <?php } ?> <?php if($download) {?> <table width="500" align="center"> <tr> <td align="center"> Image Converted to <?php echo ucwords($convert_type); ?> <img src="<?=$target_dir.'/'.$image;?>" /> </td> </tr> <td align="center"> <a href="download.php?filepath=<?php echo $target_dir.'/'.$image; ?>" />Download Converted Image</a> </td> </tr> <tr> <td align="center"><a href="index.php">Convert Another</a></td> </tr> </table> <?php } ?> </body> </html>
download.php – Downloads the converted image forcefully
<?php $file_path = $_GET['filepath']; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename="" . basename($file_path) . """); readfile($file_path); ?>
Enjoy the Day!
Hi, thanks for sharing,
How can I convert a image file that is already on my server? I was trying to do something like this
$image = $obj->convert_image(‘jpg’, $target_dir, $path_to_my_image);
But is not working, any help would be great.
Hi,
$target_dir => should be the path of the image without the image name.
$image_name => name of the image you want get and save as
If you read the article, i have mentioned $target_dir is the source of the image as well as target path.
So in your case, you should give like below;
let’s assume your image is in some folder: /var/www/html/yourfolder/image/yourimage.jpg
you should give the values this way,
$target_dir = ‘/var/www/html/yourfolder/image/’;
$image_name = ‘yourimage.jpg’;
$image = $obj->convert_image(‘jpg’, $target_dir, $image_name);
thanks,
Agurchand
thank you good code
thanks for this i am really glad you did for public
aap file converter or document converter scripts do na
It is not working in localhost.
Fatal error : undefined imagecreatefromstring function is showing.
please help how can I run it in my computer.
I guess you need to enable GD library in PHP
Warning: getimagesize(): Filename cannot be empty
how to fix in this error
Hey, @agurchand!
Please help me generating thumbnails for .ppt files.
gif conversion is not working in the script