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

Я пишу 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 ответ

Решение

Как говорится на man-странице 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 пикселей.

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