-2

我需要手动查找新图像的 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 不要问为什么

4

1 回答 1

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...

当然,图像不能包含部分像素,因此您调整大小的图像向下舍入为 802 像素。

于 2012-10-12T13:44:38.360 回答