【问题标题】:Can ImageMagick use specific number formats as in 'printf()' in the option '-format'?ImageMagick 可以在选项“-format”中使用特定的数字格式,如“printf()”吗?
【发布时间】:2020-02-06 11:12:22
【问题描述】:

我正在使用“ImageMagick”命令identify 来计算图像的像素面积:

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

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

在第二种情况下,输出为科学格式:1.80497e+07。 如果面积大于某个阈值 (>= 1000000),就会出现这种情况。

该选项可与“ImageMagick”命令convertidentifymogrify 一起使用。

是否可以让 `%[fx: ... ]' 格式选项本身使用特定的数字格式?

【问题讨论】:

    标签: imagemagick


    【解决方案1】:

    是否可以让 `%[fx: ... ]' 格式选项本身使用特定的数字格式?

    是和否。解析%[fx: ... ] 格式时,ImageMagick 将结果存储为double 数据类型。该值将以%.*g 格式传递给stdlib vsnprintf() 方法。输出将产生“极端”数字的科学记数法。

    对于“是”部分。由于您使用的是两个无符号整数 (w*h),因此您可以通过在 ImageMagick 中设置精度运算符来欺骗 vnsprintf() 的行为。

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

    但这不是真正的“修复”。它可能并不总是在系统之间起作用,并且调整整体精度可能会产生无法预料的副作用。

    对于“否”部分。使用外部实用程序将结果格式化为您可以控制的格式可能更实用、更可靠。

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

    确实不方便,但快速搜索“[bash] scientific notation”提供了许多替代方法,因为这是一项常见任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      相关资源
      最近更新 更多