47

I am trying to develop an image-based web site. I am really confused about the best image type for faster page loading speeds and best compression practices. Please advise me on the best way to compress image sizes.

user1431849
  • 499
  • 1
  • 4
  • 7

4 Answers4

118

If you are looking to reduce the size using coding itself, you can follow this code in php.

<?php 
function compress($source, $destination, $quality) {

    $info = getimagesize($source);

    if ($info['mime'] == 'image/jpeg') 
        $image = imagecreatefromjpeg($source);

    elseif ($info['mime'] == 'image/gif') 
        $image = imagecreatefromgif($source);

    elseif ($info['mime'] == 'image/png') 
        $image = imagecreatefrompng($source);

    imagejpeg($image, $destination, $quality);

    return $destination;
}

$source_img = 'source.jpg';
$destination_img = 'destination .jpg';

$d = compress($source_img, $destination_img, 90);
?>

$d = compress($source_img, $destination_img, 90);

This is just a php function that passes the source image ( i.e., $source_img ), destination image ( $destination_img ) and quality for the image that will take to compress ( i.e., 90 ).

$info = getimagesize($source);

The getimagesize() function is used to find the size of any given image file and return the dimensions along with the file type.

Yehia Awad
  • 2,898
  • 1
  • 20
  • 31
Vengat Owen
  • 1,301
  • 2
  • 8
  • 5
  • 10
    this function convert the source images to JPEG, ignore the gif animations and png transparency – nikmauro Nov 06 '15 at 15:14
  • to overcome png transparency issue mentioned by @nikmauro, i used the imagepng instead of imagejpeg. using the imagejpeg for jpg files, ofcourse just modifying if statement to use appropriate function. however to save transparency i also had to add (before output/save) : imagealphablending($image, false); imagesavealpha($image, true); I also had to devide the $quality by 10 to work as imagepng does not go from 0 - 100 but rather 0 - 9 – Shaakir Oct 21 '16 at 12:18
  • Good one there. But one thing that bothers me is why 90 for the compression? Is there a min value which when passed, the image is going to loose its "originality"? – FONGOH MARTIN Oct 30 '17 at 09:05
  • 1
    I'm not sure why but the image gets rotated when I use this code, how would I prevent this from happening. It always seems to be rotated 90 degrees anti clockwise. – MattBlack Mar 27 '18 at 21:49
  • sorted, I had to read the exif data from the original image and adjust accordingly. – MattBlack Mar 27 '18 at 22:07
  • Great! This is working but I'm getting 1 issue with it. While I'm uploading image thru the mobile camera then it sometimes rotates that image 90 degrees. What to do about that?? – rg007891 Jul 04 '23 at 05:08
12

I'd go for jpeg. Read this post regarding image size reduction and after deciding on the technique, use ImageMagick

Hope this helps

Community
  • 1
  • 1
Tudor Constantin
  • 26,330
  • 7
  • 49
  • 72
10

You can resize and then use imagejpeg()

Don't pass 100 as the quality for imagejpeg() - anything over 90 is generally overkill and just gets you a bigger JPEG. For a thumbnail, try 75 and work downwards until the quality/size tradeoff is acceptable.

imagejpeg($tn, $save, 75);
Max Hudson
  • 9,961
  • 14
  • 57
  • 107
4

well I think I have something interesting for you... https://github.com/whizzzkid/phpimageresize. I wrote it for the exact same purpose. Highly customizable, and does it in a great way.

whizzzkid
  • 1,174
  • 12
  • 30