有些应用场景下需要将图片的原图等比例放缩,需要计算缩略图的宽和高,同时又需要限制缩略图的最大和最小的宽高值,即目标缩略图的纵横比是有限制的。如何在此限制下计算缩略图的宽高值?
假设限定缩略图宽度最大值为Wmax,最小值为Wmin,高度的最大值为Hmax,最小值为Hmin。原图的宽度为W,高度为H。如下图所示:
缩略图分辨率计算算法示意图.png
坐标系中的横坐标为图片的宽度值,纵坐标为高度值。坐标系中的点的坐标为任意图片的宽和高。
图中⑦号所在的矩形区域即是缩略图宽和高可能的所有情况。
对任何一张原图等比缩放获得其缩略图的宽高值的过程,即在该坐标系中任意一点P,与原点确定的直线,与⑦号区域相交的点中,求与P最近的交点的过程。
(由于缩略图和原图的宽和高都是大于0的,不考虑坐标为负的点)
将所有的点分成如上图的7个区域。
对①号区域:特征是H / W >= Hmax / Wmin, 该区域的点与原点确定的直线与⑦号区域大部分都无交点(除了(Wmin, Hmax)这一个点),即原图无法等比缩放到预设的范围内。所以折衷取(Wmin, Hmax)作为该类图片的缩略图尺寸
对②号区域:特征是H / W <= Hmin / Wmax, 情况与①号区域类似,所以折衷取(Wmax, Hmin)作为该类图片的缩略图尺寸
剩下的③到⑦号区域,它们的 H/W 在 (Hmin/Wmax, Hmax/Wmin)之间,这些区域的点与原点确定的直线与⑦号区域均存在交点
对③号区域:特征是 Hmax / Wmin > H / W >= Hmax / Wmax, 同时,H > Hmax。该区域的点P与原点的确定的直线与⑦号区域的交点,离P最近的点均在 H = Hmax 直线上。设 Wt = W / H * Hmax,缩略图尺寸为 (Wt, Hmax)
对④号区域:特征是 Hmin / Wmax < H / W < Hmax / Wmax, 同时,W > Wmax。该区域的点P与原点的确定的直线与⑦号区域的交点,离P最近的点均在 W = Wmax 直线上。设 Ht = H / W * Wmax,缩略图尺寸为 (Wmax, Ht)
对⑤号区域:特征是 Hmax / Wmin > H / W >= Hmin / Wmin,同时,W < Wmin。该区域的点P与原点的确定的直线与⑦号区域的交点,离P最近的点均在 W = Wmin 直线上。设 Ht = H / W * Wmin,缩略图尺寸为 (Wmin, Ht)
对⑥号区域:特征是 Hmin / Wmax < H / W < Hmin / Wmin,同时,H < Hmin。该区域的点P与原点的确定的直线与⑦号区域的交点,离P最近的点均在 H = Hmin 直线上。设 Wt = W / H * Hmin,缩略图尺寸为 (Wt, Hmin)
对⑦号区域:原图的宽高在缩略图的宽高范围内,即使用原图尺寸(W, H)
以上分析可总结为如下图:
缩略图分辨率计算算法.jpg
网友评论