Как использовать pnmscale, чтобы масштабировать длинную сторону изображения и при этом сохранять соотношение? - PullRequest
1 голос
/ 22 июня 2019

Я пишу GNU Makefile для некоторой обработки изображений. Одной из задач является масштабирование изображения (формат .ppm) с помощью параметра SIZE с помощью команды pnmscale. Изображение должно быть масштабировано более длинной стороной без потери соотношения и должно быть сохранено в .scaled.

Я прочитал справочную страницу pnmscale, но не могу найти правильный вариант.

Я пробовал следующее:

pnmscale -pixels 100 example.ppm > example.scaled

Когда example.ppm имеет размер 200 x 100 pixels, и я запускаю команду pnmscale с размером 100 pixels, example.scaled должен иметь размер 100 x 50 pixels. С моим решением изображение становится очень маленьким.

1 Ответ

0 голосов
/ 22 июня 2019

Как указывает справочная страница pnmscale , параметр pixels

указывает максимальное общее количество выходных пикселей.pnmscale масштабирует изображение до этого количества пикселей.Если входное изображение уже не превышает столько пикселей, pnmscale просто копирует его в качестве вывода;pnmscale не масштабируется с -pixels.

Другими словами, указав -pixels 100, вы фактически уменьшаете изображение до максимального числа 100 пикселей.То, чего вы пытаетесь добиться, это уменьшить входное изображение до размера 100 x 50 pixels = 5000 pixels.

Еще раз просмотрев справочную страницу в pnmscale , вы получите следующее:

pnmscale [{-xsize=cols | -width=cols | -xscale=factor}] [{-ysize=rows | -height=rows | -yscale=factor}] [pnmfile]

[...]

Если вы указали одно измерение в качестве размера пикселя, а другое не указали, pnmscale масштабирует неопределенное измерение, чтобы сохранить соотношение сторон.

В вашем случае использование

pnmscale -xsize 100 example.ppm > example.scaled

должно уменьшить входное изображение до ширины 100 пикселей.

...