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

时间:2015-09-30 07:34:47

标签: php mysql html5

我正在尝试将上传的图像缩小到固定的高度和高度,例如:宽度= 200px和高度200px 。我试图用固定的宽度缩小图像的宽度,并用新的宽度计算新的高度。现在我想要实现的是将宽度和高度缩小到固定尺寸宽度= 200px&身高= 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等)到固定的宽度和高度。只是引导我朝着我将要做的方向。如果有人能够通过示例解释或为我编辑代码,那将会非常棒。提前致谢

1 个答案:

答案 0 :(得分:0)

您可以看到上面的评论来回答关于如何处理小于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;