图像调整大小而不裁剪和保持纵横比

时间:2013-09-29 09:45:15

标签: php image image-processing imageview imagick

我希望调整上传到服务器上的图片大小,但不要裁剪,以便向他们展示完整版的图片。

基本思路是我只想向用户显示全尺寸的图像(已调整大小)并让他们下载原始文件。

假设是否有人上传了大分辨率且大小为10MB的图像,那么如果我将整个图像加载到图库或其他内容中则需要时间。这就是为什么我只需要将iamge调整为小规模,以显示所有内容并缩小尺寸。

我正在使用imagick,但没有得到如何为此做数学,只知道要裁剪。

我知道我可以减少图像的宽度并让它自动调整高度,但仍然需要减少它的数量。

如果有人能解释,我会感激不尽。

DropBox使用它可以让你上传任意大小的图像,但在图库中它会显示分辨率更低,尺寸更小的图像。但请注意:图像的任何部分都不会被裁剪。

编辑: 例如,如果用户上传Dimension 2496×1404和尺寸3MB的图像。 我需要的图像应该具有较小的尺寸,如1280 x 960,尺寸小于1MB,以便用于图库。

1 个答案:

答案 0 :(得分:2)

imagemagick的文档:
http://www.imagemagick.org/Usage/resize/#thumbnail


或者,如果您在代码中使用它:

$width = 100; 
$height = 300; 

$ratio = $width / $height; // get ratio by dividing width by height

$newWidth = 200; // a random new width
$newHeight = $newWidth / $ratio; // devide by ratio to get new width (600 in this case)
// OR, if you have a new height:
$newHeight = 200;
$newWidth = $newHeight * $ratio; // multiply instead of devide

如果你想制作它的实际像素(我认为你会这样做),不要忘记最后使用round()


回到这里,我想到了另一个解决方案(实际上更容易):

$width = 100; 
$height = 300; 

$newWidth = 200;
$newHeight = ($newWidth/$width) * $height;

$newWidth/$width部分计算宽度变化的程度(在我的示例中,它将导致2),因此高度以相同的比率变化。如果你想根据身高$newWidth,你可以将它的相同作品转过来。