我正在尝试将上传的图像缩小到固定的长度和高度,例如:宽度= 200px和高度200px。我尝试用固定宽度缩小图像的宽度,并通过新宽度计算新高度。现在我要实现的是将宽度和高度缩小到固定大小 width=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;