以中心化裁剪图片

2018年8月15日 0 作者 筱枫

最近接到这样一个需求,要求将现有的图片裁剪为13:8大小(比率约为1.625)的,因为图片数量非常多,所以只能采用程序自动计算裁剪位置以及区域

需要考虑两种图片的类型,一种是横置,一种是竖置,对于正方形的图片,可以简单的认为是横置。

现在主要就是针对各种图片进行计算裁剪方式。

首先针对横置图片,考虑下面这张图片

这张图片是1000×667,比例约为(1.449),可以发现很明显跟我们所需的比例不同,然后,我们所需要截取下来的区域大概如下

那么, 如何计算出这个需要截取的区域呢?

主要问题有两点,一是如何确定开始截取的位置,即以左上角为基准的偏移;二是如何确定需要截取的长度,这里可以看到,长度不变,变的只有宽度

计算方式其实很简单,一个反推而已

长/宽=1.625,已知长1000,则可以算出宽就是1000/1.625 ≈ 615

接着计算偏移量,由于是从中间开始裁剪,所以上下部分被裁剪掉的宽度是相等的,所以可以简单的将被减去的宽度除以2即可 (667-615)/2

这样就可以得出偏移量为x:0 y:26

裁剪区域为1000×615

之后再使用

convert -crop "1000x616+0+26" old.jpg new.jpg

即可转换

对于竖着的图像,其实可以看作是对于长裁剪,宽不变,所以计算机制也可以依据上面来

长 = 宽*1.625

偏移量 = (旧长度 – 新长度)/2

虽然是一个很简单的算术题,但是对于离开学校已经好久的我,还是费了一番手脚才折腾出来,果然这种算法问题还是要经常开动脑袋才行