Php 将图像缩小到具有相同纵横比分辨率的固定宽度和高度

Php 将图像缩小到具有相同纵横比分辨率的固定宽度和高度,php,mysql,html,Php,Mysql,Html,我正在尝试将上传的图像缩小到固定的大小和高度,例如:width=200px和height 200px。我试图用固定的宽度缩小图像的宽度,并用新的宽度计算新的高度。现在我想要实现的是将宽度和高度都缩小到一个固定的大小width=200px&height=200px 我的HTML: <form action="do_upload.php" method="post" enctype="multipart/form-data"> <input type="fi

我正在尝试将上传的图像缩小到固定的大小和高度,例如:width=200px和height 200px。我试图用固定的宽度缩小图像的宽度,并用新的宽度计算新的高度。现在我想要实现的是将宽度和高度都缩小到一个固定的大小width=200px&height=200px

我的HTML:

        <form action="do_upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="upload_image">
    <br/>
    <br/>
    <input type="submit" value="submit">
    </form>



do_upload.php:

<?php

move_uploaded_file($_FILES["upload_image"]["tmp_name"], "uploads/" . $_FILES["upload_image"]["name"]);

$image_path = "uploads/" . $_FILES["upload_image"]["name"];

$src = imagecreatefromjpeg($image_path);
list($width, $height) = getimagesize($image_path);

$newwidth = 200;
$newheight = ($height / $width) * $newwidth;

$tmp = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($tmp, $src, 0, 0,0,0,$newwidth,$newheight, $width, $height);

imagejpeg($tmp, "uploads/small.jpeg", 100);

imagedestroy($src);
imagedestroy($tmp); 
?>


这对我来说很好,可以缩小图像。请指导我如何将所有图像(jpeg、png、gif等)缩小到固定的宽度和高度。只要指引我做这件事的方向。如果有人可以解释一个例子或编辑我的代码为我这将是伟大的。提前感谢

您可以查看上面的评论,以回答有关如何处理小于200的维度和纵横比的问题。也就是说,我可以继续回答关于如何在任一维度上进行缩放的问题。基本上,问题很简单

首先,确定现有图像的宽度或高度是否大于尺寸。在此基础上,确定图像的比例因子,然后将该比例因子应用于两个维度

在代码中,可能看起来像:

$src = imagecreatefromjpeg($image_path);
list($width, $height) = getimagesize($image_path);

$max_dimension = 200;
if($width >= $height) {
    // scale on width
    $scaling_factor = $width / $max_dimension;
} else {
    // scale on height
    $scaling_factor = $height / $max_dimension;
}

$new_width = $width / $scaling_factor;
$new_height = $height / $scaling_factor;
一个更通用的解决方案,可以让您指定任何要缩放的矩形(即不同的最大高度和宽度),它可能是这样的

$max_width = 200;
$max_height = 150;
// determine which dimension must be scaled to fit target size
$width_scaling_factor = $width / $max_width;
$height_scaling_factor = $height / $max_height;
if($width_scaling_factor >= $height_scaling_factor) {
    $scaling_factor = $width_scaling_factor;
} else {
    $scaling_factor = $height_scaling factor;
}

$new_width = $width / $scaling_factor;
$new_height = $height / $scaling_factor;

为什么不使用第三方库,比如@martinezdelariva,我希望它用PHP实现。当你说“固定大小”时,你是指固定的最大大小。你确实在标题中提到了纵横比,但在你的帖子中没有提到,所以不清楚你是否想按比例缩放。假设你这样做了,下一个问题是非正方形图像会发生什么。对于横向图像,显然需要将宽度缩放到200,而对于纵向图像,则需要将高度缩放到200。问题是,让另一个维度小于200px可以吗,或者您是否希望向图像添加(可能是透明的)像素以确保它正好是200x200像素?让我解释一下我试图实现的目标。我有一个div,大小高度=200px,宽度=200px。我想在表单中显示一个图像。我希望图像在不丢失纵横比的情况下适合div,并成为200px x200px@Raja那么如果图像是400 x 300呢?如果纵横比是固定的,这将缩小到200 X 150。您想要一个200 X 150的图像,还是想要一个200 X 200的图像,它实际上是一个200 X 150的图像,具有50个像素的附加垂直填充(可能具有透明像素、白色像素等)?