最近在研究PHP,因为项目中需要使用到缩略图,缩略图如果不裁剪的话,你会发现图像变得奇形怪状,不利于排版。因此这里就简单介绍一下生成居中缩略图的想法:
一张图片480*800
现在我要裁剪成一张240*240的图片
类似于上面的这张。
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端的位置
转载于:https://blog.51cto.com/fengwan/1668970