Я думаю, что вы на правильном пути с оператором ImageMagick
-trim
1) , но хитрость заключается в том, чтобы заставить его сказать вам, что он будет делать без на самом деле этого, а затем измените это, чтобы сделать то, что вы действительно хотите ...
Итак, чтобы получить триммер ImageMagick
рассчитывает для вашего первого изображения, вы делаете это:
convert -fuzz 10% image.jpg -format "%@" info:
60x29+21+31
Это прямоугольник размером 60x29 пикселей со смещением 21 в поперечном направлении и 31 в нижнем левом углу. Теперь мы хотим получить эти значения в bash
переменных, поэтому я установил IFS (Разделитель входных полей) для разделения полей на пробелы, x
, а также +
знаков:
#!/bin/bash
IFS=" x+" read a b c d < <(convert -fuzz 10% image.jpg -format "%@" info:)
echo $a $b $c $d
60 29 21 31
Теперь я могу игнорировать 29
и 31
, потому что нас интересует только обрезка по ширине и обрезка следующим образом:
convert image.jpg -crop "${a}x+${c}+0" out.jpg
Итак, для ваших 2-х изображений я получаю:
и полная процедура такова:
#!/bin/bash
IFS=" x+" read a b c d < <(convert -fuzz 10% image.jpg -format "%@" info:)
convert image.jpg -crop "${a}x+${c}+0" out.jpg
Примечания
1) -format %@
- это просто сокращение для оператора -trim
, которое будет полностью
convert image.jpg -trim info:
image.jpg JPEG 72x40 200x100+16+24 8-bit sRGB 0.000u 0:00.000