You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整图片尺寸使其匹配指定宽高比 如3:4的最近适配尺寸

图片指定宽高比最适配尺寸计算方案

适用场景:支持输入任意原始图片尺寸,输出与原始尺寸差值最小、完全符合指定宽高比的新尺寸,核心判断标准是新尺寸与原始尺寸的差值最小,无固定输出数值要求。

计算逻辑

  • 先将目标宽高比转换为最简比值,例如3:4的核心校验规则为 新宽度 / 新高度 = 3 / 4 = 0.75
  • 共提供2种适配策略可按需选择:
    1. 固定单边适配:保持原始宽度/原始高度其中一个数值不变,计算另一维度的符合比例值,选择与原始尺寸偏差更小的一组作为输出。以1833×2133的原始尺寸为例:

      固定宽度适配:高度=1833×4÷3=2444,对应尺寸1833×2444,与原始高度差值为311
      固定高度适配:宽度=2133×3÷4≈1600,对应尺寸1600×2133,与原始宽度差值为233
      最终输出偏差更小的1600×2133即可满足3:4要求

    2. 双边小幅调整适配:允许宽高同时微调,计算总像素差(|新宽×新高 - 原宽×原高|)最小的符合比例尺寸,你提到的pixelz处理案例就采用这类策略,最终输出1623×2164的差值比固定单边适配更小。

Python实现代码示例

def get_nearest_aspect_ratio_size(original_w, original_h, target_ratio_w, target_ratio_h):
    # 计算目标比例
    target_ratio = target_ratio_w / target_ratio_h
    # 候选1:按原始宽度算高度
    h1 = round(original_w / target_ratio)
    candidate1 = (original_w, h1)
    diff1 = abs(original_w * h1 - original_w * original_h)
    # 候选2:按原始高度算宽度
    w2 = round(original_h * target_ratio)
    candidate2 = (w2, original_h)
    diff2 = abs(w2 * original_h - original_w * original_h)
    # 候选3/4:双边调整找最小像素差,适配pixelz类效果
    base = max(original_w // target_ratio_w, original_h // target_ratio_h)
    candidate3 = (base * target_ratio_w, base * target_ratio_h)
    candidate4 = ((base+1) * target_ratio_w, (base+1) * target_ratio_h)
    diff3 = abs(candidate3[0] * candidate3[1] - original_w * original_h)
    diff4 = abs(candidate4[0] * candidate4[1] - original_w * original_h)
    # 取所有候选中差值最小的返回
    all_candidates = [(candidate1, diff1), (candidate2, diff2), (candidate3, diff3), (candidate4, diff4)]
    return min(all_candidates, key=lambda x: x[1])[0]

# 示例调用:原始尺寸1833×2133,目标比例3:4
print(get_nearest_aspect_ratio_size(1833, 2133, 3, 4))

示例效果

示例图片

内容的提问来源于stack exchange,提问作者Monark Unadkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:54:04