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