Search code examples
phpimagescale

Scale Image Using PHP and Maintaining Aspect Ratio


Basically I want to upload an image (which i've sorted) and scale it down to certain constraints such as max width and height but maintain the aspect ratio of the original image.

I don't have Imagick installed on the server - otherwise this would be easy.

Any help is appreciated as always. Thanks.

EDIT: I don't need the whole code or anything, just a push in the right direction would be fantastic.


Solution

  • I had written a peice of code like this for another project I've done. I've copied it below, might need a bit of tinkering! (It does required the GD library)

    These are the parameters it needs:

    $image_name - Name of the image which is uploaded
    $new_width - Width of the resized photo (maximum)
    $new_height - Height of the resized photo (maximum)
    $uploadDir - Directory of the original image
    $moveToDir - Directory to save the resized image
    

    It will scale down or up an image to the maximum width or height

    function createThumbnail($image_name,$new_width,$new_height,$uploadDir,$moveToDir)
    {
        $path = $uploadDir . '/' . $image_name;
    
        $mime = getimagesize($path);
    
        if($mime['mime']=='image/png') { 
            $src_img = imagecreatefrompng($path);
        }
        if($mime['mime']=='image/jpg' || $mime['mime']=='image/jpeg' || $mime['mime']=='image/pjpeg') {
            $src_img = imagecreatefromjpeg($path);
        }   
    
        $old_x          =   imageSX($src_img);
        $old_y          =   imageSY($src_img);
    
        if($old_x > $old_y) 
        {
            $thumb_w    =   $new_width;
            $thumb_h    =   $old_y*($new_height/$old_x);
        }
    
        if($old_x < $old_y) 
        {
            $thumb_w    =   $old_x*($new_width/$old_y);
            $thumb_h    =   $new_height;
        }
    
        if($old_x == $old_y) 
        {
            $thumb_w    =   $new_width;
            $thumb_h    =   $new_height;
        }
    
        $dst_img        =   ImageCreateTrueColor($thumb_w,$thumb_h);
    
        imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
    
    
        // New save location
        $new_thumb_loc = $moveToDir . $image_name;
    
        if($mime['mime']=='image/png') {
            $result = imagepng($dst_img,$new_thumb_loc,8);
        }
        if($mime['mime']=='image/jpg' || $mime['mime']=='image/jpeg' || $mime['mime']=='image/pjpeg') {
            $result = imagejpeg($dst_img,$new_thumb_loc,80);
        }
    
        imagedestroy($dst_img); 
        imagedestroy($src_img);
    
        return $result;
    }