Может ли ImageMagick использовать указанные c числовые форматы, как в 'printf ()' в опции '-format'? - PullRequest
1 голос
/ 06 февраля 2020

Я использую команду 'ImageMagick' identify для вычисления площади изображений в пикселях:

$ identify -format "%[fx:w*h]\n"  example-small.jpg 
699392

$ identify -format "%[fx:w*h]\n"  example-large.jpg
1.80497e+07

Во втором случае выходные данные представлены в научном формате c: 1.80497e+07 , Это тот случай, если область больше некоторого порога (> = 1000000).

Эта опция может использоваться с командами ImageMagick convert, identify и mogrify.

Возможно ли сделать `% [fx:. ..] 'опция формата использует определенный c числовой формат сам по себе?

1 Ответ

2 голосов
/ 06 февраля 2020

Можно ли сделать так, чтобы опция формата '% [fx: ...]' сама по себе использовала формат чисел c?

Да и Нет. При разборе %[fx: ... ] формат, ImageMagick сохраняет результат как double тип данных. Это значение будет передано в метод stdlib vsnprintf() в формате %.*g. В результате получится научная нотация c для «крайних» чисел.

Для части «да». Поскольку вы работаете с двумя целыми числами без знака (w*h), вы можете подделать поведение vnsprintf(), установив оператор точности в ImageMagick.

identify -precision 32 -format "%[fx:w*h]\n"  example-large.jpg

Однако это не так " исправление ". Это может не всегда работать между системами, и настройка общей точности может иметь непредвиденные побочные эффекты.

Для части «нет». Может быть более практичным и надежным использовать внешнюю утилиту для форматирования результатов в формат, которым вы можете управлять.

printf "%.f" $(identify -format "%[fx:w*h]" example-large.jpg)

Правда, это неудобно, но быстрый поиск по запросу " [bash] scientifi c нотация"предлагает множество альтернативных способов, поскольку это обычная задача.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...