最近在研究PHP,因为项目中需要使用到缩略图,缩略图如果不裁剪的话,你会发现图像变得奇形怪状,不利于排版。因此这里就简单介绍一下生成居中缩略图的想法:

一张图片480*800

wKioL1WQwCaQGkPPAAKRfEgF3mc371.jpg

现在我要裁剪成一张240*240的图片

wKioL1WQwGShBReHAACWxp1cPRw993.jpg

类似于上面的这张。


1.首先我们需要计算缩放的时候是宽度优先还是高度优先,如果是像上面这样的就是宽度优先。

则缩放比例就是

ratio = p_w_picpath_width_dst/p_w_picpath_width_src


2.根据比例,缩小后的高度就是

p_w_picpath_height_pre = p_w_picpath_height_src *  ratio


3.获取了缩放后高的高度,再减去需要生成的高度,就是缩小后剩余的高度

p_w_picpath_height_rem = p_w_picpath_hieght_pre - p_w_picpath_height_dst


4.最后计算开始裁剪的地方

start_cut = p_w_picpath_height_rem  *  p_w_picpath_width_src/p_w_picpath_widtg_dst / 2


就上面的公式不好理解:


总结:

宽度优先的公式

开始裁剪的坐标 = (原图高  *  (目标图宽/原图宽) -目标图高) * (原图宽/目标图宽 ) / 2


高度优先的公式

开始裁剪的坐标 = (原图宽  *  (目标图高/原图高) -目标图宽) * (原图高/目标图高 ) / 2




难点:

当获取到裁剪剩余的高度的时候,还需要还原为原来图片的比例。

除以2,是为了居中,空出2端的位置