doubingjian2006 2012-10-11 23:08
浏览 81
已采纳

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

I need to manually find DPI of new image.

$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

Why when i resize image i get 802 instead of 800?

and i must use DPI dont ask why

  • 写回答

1条回答 默认 最新

  • douwendu2460 2012-10-12 13:44
    关注

    The answer is all in the math... Let's just focus on the width for simplicity.

    Pulling back the layers a little bit, start with scaling operations (reordered to help with loss of precision). Here, I'm calculating the output DPI value and verifying the result by solving the original equation for $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
    

    You can see with this non-corrected value for DPI, we arrive back at 800 for the width value. When we round up to the next number (using the ceil operator), it changes the results. By unwinding the math, we can see why you end up with 802px in the output:

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

    Of course, images can't contain partial pixels, so your resized image is rounded down to 802px.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 商城生产日期批次库存问题
  • ¥15 esp8266控制共阳极wrgb灯板无法关闭所有led灯
  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来
  • ¥15 完成虚拟机环境配置,还有安装kettle