如何将图片分割为正方形区块?求对应尺寸计算通用公式
正方形区块尺寸计算通用方案
预设变量
先定义统一参数:
- 原图宽度:
W(单位:像素) - 原图高度:
H(单位:像素) - 待分割总区块数:
N
核心逻辑
要保证所有区块为等大正方形,同时总区块数尽量接近要求的N、无多余裁切/尽量少裁切的前提下,通用计算步骤如下:
- 先计算原图的宽高比
r = W/H - 设横向划分的区块数为
cols,纵向划分的区块数为rows,二者需满足cols ≈ r * rows,且cols * rows ≈ N - 联立可得近似区块数:
- 纵向区块数:
rows ≈ √(N / r) - 横向区块数:
cols ≈ √(N * r)
- 纵向区块数:
- 对
cols和rows取整后,单个正方形区块的边长s取以下两个值的较小值,保证区块不会超出原图边界:
s = min( floor(W / cols), floor(H / rows) )
示例验证
拿你给出的9000×6000像素、分割为1000个区块的场景验证:
- 宽高比
r = 9000/6000 = 1.5 - 纵向区块数近似值
rows ≈ √(1000 / 1.5) ≈ 25.8,取整为26 - 横向区块数近似值
cols ≈ √(1000 * 1.5) ≈ 38.7,取整为39 - 校验总区块数:26×39=1014,和要求的1000非常接近,误差在可接受范围
- 计算边长:
min(9000//39, 6000//26) = min(230, 230) = 230px,刚好是正方形
特殊场景说明
- 若要求总区块数必须严格等于
N:可以对原图边缘做少量透明/白边填充,调整W或H到s*cols和s*rows的整数倍即可。 - 若可以接受少量边缘裁切:边长可直接取
max( floor(W / cols), floor(H / rows) ),裁掉超出原图边界的区域即可。
内容的提问来源于stack exchange,提问作者kern
相关产品推荐
相关产品推荐

