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

如何将PIL.Image调整为最接近3的倍数的尺寸?

将图片尺寸调整为最接近3的倍数的实现方案

核心算法逻辑

针对图片的宽度、高度两个维度,分别按以下规则计算目标尺寸:

  1. 计算当前数值除以3的余数 remainder = num % 3
  2. 根据余数确定最终值:
    • 余数为0:保持原数值不变
    • 余数为1:对比num - 1和num + 2与原数值的距离,选择更近的(比如100的场景下,99比102更接近,选99)
    • 余数为2:对比num - 2和num + 1与原数值的距离,选择更近的(比如101的场景下,99和102距离相等,可根据需求二选一)

如果业务要求不允许放大图片,逻辑可简化:余数不为0时直接取num - remainder,得到不超过原尺寸的最大3的倍数。

代码示例(Python)

def adjust_to_nearest_multiple_of_three(size):
    width, height = size
    def adjust_dim(num):
        remainder = num % 3
        if remainder == 0:
            return num
        # 生成两个候选目标值
        candidate_down = num - remainder
        candidate_up = num + (3 - remainder)
        # 选择距离原数值更近的,距离相同时优先选更大的
        if abs(num - candidate_down) <= abs(num - candidate_up):
            return candidate_down
        else:
            return candidate_up
    return (adjust_dim(width), adjust_dim(height))

# 测试示例
original_size = (100, 100)
target_size = adjust_to_nearest_multiple_of_three(original_size)
print(target_size)  # 输出 (99, 99)

图像处理库适配示例

如果使用Pillow或OpenCV等工具,可直接将计算出的目标尺寸传入resize函数:

from PIL import Image

# 打开原图
img = Image.open("original_img.png")
# 计算目标尺寸
new_size = adjust_to_nearest_multiple_of_three(img.size)
# 高质量缩放并保存
resized_img = img.resize(new_size, Image.LANCZOS)
resized_img.save("resized_img.png")

内容的提问来源于stack exchange,提问作者Eric Mendes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:35:19