美文网首页
缩略图宽高算法

缩略图宽高算法

作者: 乔尔0o0 | 来源:发表于2020-06-10 15:37 被阅读0次

有些应用场景下需要将图片的原图等比例放缩,需要计算缩略图的宽和高,同时又需要限制缩略图的最大和最小的宽高值,即目标缩略图的纵横比是有限制的。如何在此限制下计算缩略图的宽高值?

假设限定缩略图宽度最大值为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

相关文章

网友评论

      本文标题:缩略图宽高算法

      本文链接:https://www.haomeiwen.com/subject/sulptktx.html