PHP Image Resizing

后端 未结 2 1612
没有蜡笔的小新
没有蜡笔的小新 2020-12-16 08:43

I\'ve got a script that uploads files to the server as well as adds the filename to a database, but what I\'d like to do it restrict the maximum dimensions of the image befo

相关标签:
2条回答
  • 2020-12-16 09:31

    I used in the past this function to generate thumbnails that fit in given dimensions keeping aspect ratio, maybe you can use it somehow:

    function resize_img_nofill($src_name,$dst_name,$width,$height,$dontExpand=false) {
            $MAGIC_QUOTES = set_magic_quotes_runtime();
            set_magic_quotes_runtime(0);
    
            $type =  strtolower(substr(strrchr($src_name,"."),1));
    
            if($type == "jpg") {
                $src = imagecreatefromjpeg($src_name);
            } else if($type == "png") {
                $src = imagecreatefrompng($src_name);    
            } else if($type == "gif") {
                $src = imagecreatefromgif($src_name);    
            } else {
                    if($src_name != $dst_name) copy($src_name,$dst_name);
                    set_magic_quotes_runtime($MAGIC_QUOTES);
                    return;
            }
    
    
    
            $d_width = $s_width = imagesx($src);
            $d_height = $s_height = imagesy($src);
    
            if($s_width*$height > $width*$s_height && (!$dontExpand || $width < $s_width)) {
                $d_width = $width;
                $d_height = (int)round($s_height*$d_width/$s_width);
            } else if(!$dontExpand || $height < $s_height) {
                $d_height = $height;
                $d_width = (int)round($s_width*$d_height/$s_height);
            }
    
            if($s_width != $d_width || $s_height != $d_height) {
    
                    if($type == "jpg") {
                            $dst = imagecreatetruecolor($d_width,$d_height);
                    } else if($type == "png") {
                    $dst = imagecreate($d_width,$d_height);
                    } else if($type == "gif") {
                    $dst = imagecreate($d_width,$d_height);
                    } 
    
                    $white = imagecolorallocate($dst,255,255,255);
                    imagefilledrectangle($dst,0,0,$d_width,$d_height,$white);
                    imagecopyresampled($dst,$src,0,0,0,0,$d_width,$d_height,$s_width,$s_height);
    
                    if($type == "jpg") 
                    imagejpeg($dst,$dst_name, 80);  
                    else if($type == "png")
                    imagepng($dst,$dst_name);       
                    else if($type == "gif")
                    imagegif($dst,$dst_name);       
    
                    imagedestroy($dst);
                    imagedestroy($src);
            } else {
                    copy($src_name,$dst_name);
            }
    
    
            set_magic_quotes_runtime($MAGIC_QUOTES);
            return array($d_width,$d_height);
    }
    
    0 讨论(0)
  • 2020-12-16 09:40

    To my knowledge, you can’t resize the image before uploading it. (I could be wrong!) However, when you upload the image it goes into a temporary file. You can resize the temporary image and copy the resized image to its final destination.

    This code was adapted from a snippet at FliquidStudios: Resizing images in PHP with GD and Imagick.

    Since (it seems) you want to keep the width constant, you don’t really need to do a lot of ratio tests.

    Update:

    You should be able to simply use this in place of your original code. Most of it is unchanged.

    <?php
    
    // resizes an image to fit a given width in pixels.
    // works with BMP, PNG, JPEG, and GIF
    // $file is overwritten
    function fit_image_file_to_width($file, $w, $mime = 'image/jpeg') {
        list($width, $height) = getimagesize($file);
        $newwidth = $w;
        $newheight = $w * $height / $width;
    
        switch ($mime) {
            case 'image/jpeg':
                $src = imagecreatefromjpeg($file);
                break;
            case 'image/png';
                $src = imagecreatefrompng($file);
                break;
            case 'image/bmp';
                $src = imagecreatefromwbmp($file);
                break;
            case 'image/gif';
                $src = imagecreatefromgif($file);
                break;
        }
    
        $dst = imagecreatetruecolor($newwidth, $newheight);
        imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    
        switch ($mime) {
            case 'image/jpeg':
                imagejpeg($dst, $file);
                break;
            case 'image/png';
                imagealphablending($dst, false);
                imagesavealpha($dst, true);
                imagepng($dst, $file);
                break;
            case 'image/bmp';
                imagewbmp($dst, $file);
                break;
            case 'image/gif';
                imagegif($dst, $file);
                break;
        }
    
        imagedestroy($dst);
    }
    
    // init file vars
    $pic  = $_FILES['photo']['name'];
    $target = 'uploads/' . basename( $_FILES['photo']['name']);
    $temp_name = $_FILES['photo']['tmp_name'];
    $type = $_FILES["photo"]["type"];
    
    // Connects to your Database 
    mysql_connect("hostname", "username", "password") or die(mysql_error()) ; 
    mysql_select_db("database") or die(mysql_error()) ; 
    
    // get form data
    $name = mysql_real_escape_string(isset($_POST['name']) ? $_POST['name'] : 'No name');
    
    //Writes the information to the database 
    mysql_query("INSERT INTO `table` (name, photo) VALUES ('$name','$pic')") ; 
    
    // resize the image in the tmp directorys
    fit_image_file_to_width($temp_name, 200, $type);
    
    //Writes the photo to the server
    if(move_uploaded_file($temp_name, $target)) {
    
        //Tells you if its all ok 
        echo "The file ". basename( $_FILES['photo']['name'] ). " has been uploaded"; 
    
    } else {
    
        //Gives and error if its not 
        echo "Sorry, there was a problem uploading your file."; 
    
    }
    
    ?>
    
    0 讨论(0)
提交回复
热议问题