Увеличить изображение холста на число, кратное 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 также может использоваться для управления центрированием и выравниванием.

Другие вопросы по тегам