How to convert all images to JPG format in PHP?

17,606

Maybe it's not working with PNG because PNG only supports compression levels 0 to 9.

I'd also rather modify the behaviour based on MIME type, not extension. And I guess you're checking your POST user input before using it in code ;)

Here's my variant of the code:

$path = "../images/DVDs/";

$img = $path . $_POST['logo_file'];

if (($img_info = getimagesize($img)) === FALSE)
  die("Image not found or not an image");


switch ($img_info[2]) {
  case IMAGETYPE_GIF  : $src = imagecreatefromgif($img);  break;
  case IMAGETYPE_JPEG : $src = imagecreatefromjpeg($img); break;
  case IMAGETYPE_PNG  : $src = imagecreatefrompng($img);  break;
  default : die("Unknown filetype");
}

$tmp = imagecreatetruecolor(350, 494);
imagecopyresampled($tmp, $src, 0, 0, intval($_POST['x']), intval($_POST['y']),
                   350, 494, intval($_POST['w']), intval($_POST['h']));


$thumb = $path . pathinfo($img, PATHINFO_FILENAME) . "_thumb";
switch ($img_info[2]) {
  case IMAGETYPE_GIF  : imagegif($tmp,  $thumb . '.gif');      break;
  case IMAGETYPE_JPEG : imagejpeg($tmp, $thumb . '.jpg', 100); break;
  case IMAGETYPE_PNG  : imagepng($tmp,  $thumb . '.png', 9);   break;
  default : die("Unknown filetype");
}

For every filetype you want supported, you only have to add two lines of code.

Share:
17,606
Saleh
Author by

Saleh

Updated on June 17, 2022

Comments

  • Saleh
    Saleh almost 2 years

    I am developing a website in PHP that let the user to upload images and then let him to decide how the image should be using jQuery - PHP integeration to select the area that wanted to be the picture and then click the crop button to crop it and save it.

    The problem that I am facing is that not all images type are good to crop and save so I noticed that the easy solution for it to convert the image to JPG and then let the user to crop it because it's the easy way to do it in JPG format.

    How I can do it?

    Is this the best solution for images types problem?

    EDIT:

    I am using this code to crop images and it's not wroking in PNG format and also limited to 3 ext.

    $path_parts = pathinfo("../images/DVDs/".$_POST['logo_file']);
            if ($path_parts['extension'] == "png") {
    
                    $src = imagecreatefrompng("../images/DVDs/".$_POST['logo_file']);
    
                            $tmp = imagecreatetruecolor(350, 494);
                            imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                            imagepng($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
                } else if ($path_parts['extension'] == "jpg" || $path_parts['extension'] == "jpeg") {
    
                            $src = imagecreatefromjpeg("../images/DVDs/".$_POST['logo_file']);
    
                            $tmp = imagecreatetruecolor(350, 494);
                            imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                            imagejpeg($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
                    } else if ($path_parts['extension'] == "gif") {
    
                            $src = imagecreatefromgif("../images/DVDs/".$_POST['logo_file']);
    
                            $tmp = imagecreatetruecolor(350, 494);
                            imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                            imagegif($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
                        }
    

    I want to convert images to JPG format because it's the easiest to convert without any problem.

  • staabm
    staabm about 10 years
    why does this snippet use max-compression for PNG (9, worst quality) and best quality for JPEG? This seems like a typo.