Php 将图像缩小到具有相同纵横比分辨率的固定宽度和高度
我正在尝试将上传的图像缩小到固定的大小和高度,例如:width=200px和height 200px。我试图用固定的宽度缩小图像的宽度,并用新的宽度计算新的高度。现在我想要实现的是将宽度和高度都缩小到一个固定的大小width=200px&height=200px 我的HTML: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
<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个像素的附加垂直填充(可能具有透明像素、白色像素等)?