PHP调整图像大小保持宽高比到精确大小

时间:2012-10-11 23:08:47

标签: php image-resizing aspect-ratio

我需要手动查找新图像的DPI。

$input_width = 361;
$input_height = 413;

$input_dpi_x = 72;
$input_dpi_y = 72;

$output_width = 800;
$output_height = $input_height * $output_width / $input_width;

$output_dpi_x = ceil(($input_dpi_x / $input_width) * $output_width);
$output_dpi_y = ceil(($input_dpi_y / $input_height) * $output_y_res);

echo "Outpud_dpi_x = " . $output_dpi_x;
//Outpud_dpi_x = 160

为什么当我调整图像大小时,我得到802而不是800?

我必须使用DPI,不要问为什么

1 个答案:

答案 0 :(得分:0)

答案就在数学中......为了简单起见,我们只关注宽度。

稍稍拉回图层,从缩放操作开始(重新排序以帮助丢失精度)。在这里,我正在计算输出DPI值并通过求解$output_width的原始等式来验证结果。

$output_dpi_x = $output_width * $input_dpi_x / $input_width;  // 159.5567867...
$output_width = $output_dpi_x * $input_width / $input_dpi_x;  // 800

你可以看到DPI的这个未校正值,我们回到800为宽度值。当我们向下舍入到下一个数字(使用ceil运算符)时,它会更改结果。通过展开数学,我们可以看出为什么你在输出中最终得到了802px:

$output_dpi_x = ceil($output_dpi_x);  // 160
$output_width = $output_dpi_x * $input_width / $input_dpi_x;  // 802.22222222...

当然,图像不能包含部分像素,因此调整后的图像会向下舍入到802px。