Увеличить изображение холста на число, кратное N
У меня есть изображение определенных размеров, скажем, WxH. Моя цель состоит в том, чтобы увеличить размер холста (без масштабирования изображения) до таких размеров, что W'xH', что W делится на произвольный N, а H' делится на произвольный M, но оба являются наименьшими возможными st W'>=W и H'>=H.
Я искал тонны документов, но, похоже, я не совсем определил, что я ищу.
1 ответ
Вот решение с использованием awk, но я уверен, что есть много других методов.
#!/bin/bash
N=4
M=5
FILENAME="rose:"
WIDTH=$(identify -format %w "${FILENAME}" | awk -v N=$N '{ m = $1 % N; d = int($1 / N) + 1; printf "%d", (m==0)? $1 : d * N}')
HEIGHT=$(identify -format %h "${FILENAME}" | awk -v M=$M '{ m = $1 % M; d = int($1 / M) + 1; printf "%d", (m==0)? $1 : d * M}')
convert "${FILENAME}" -extent "${WIDTH}x${HEIGHT}" /tmp/output.png
Это работает, читая FILENAME
метрики и вычисляет следующую произвольную делимость с помощью awk - если еще не делится. Чем передать новую ширину / высоту -extent
оператор, который увеличит размер холста без изменения размера / масштабирования изображения. -gravity
также может использоваться для управления центрированием и выравниванием.