将ImageMagick的输出从科学转换为十进制?

时间:2012-06-06 13:55:07

标签: unix image-processing terminal imagemagick pipe

我在终端有一个小的单线程,用于将许多JPEG文件的像素数写入文本文件:

find . -name *.jpg -exec convert {} -format "%[fx:w*h]" info: \; > sizes.txt

确实如此,但有些数字是用科学记数法写的,就像这里:

949200
960000
1.098e+06
1.038e+06
1.1664e+06
1.0824e+06
831600

使用十进制表示法输出命令的最强大/最优雅的方法是什么,如下所示?

949200
960000
109806
103806
1166406
1082406
831600

我想知道你是否会在ImageMagick fx 部分中执行此操作,或者将输出传递给另一个命令进行转换。谢谢!

3 个答案:

答案 0 :(得分:2)

根据http://www.imagemagick.org/script/escape.php 没有明显的方法来获得%fx的其他数字格式: 指令,因此需要命令行解决方案。

转换w * h科学记数法输出将使您失去意义 数字,所以更好地输出w和h分别和乘法。

使用bc,这将是:

find . -name '*.jpg' -exec convert {} -format "%w*%h" info: \; |bc

答案 1 :(得分:1)

要使ImageMagick的打印数字大于一百万而不将其截断为指数(科学的)表示法,请使用-precision n选项。默认精度为6。我建议将其设置为12,它允许数字最大为1e + 12(1后跟十二个零)。

$ convert xc: -precision 12 -format '%[fx:1000*1000]\n' info:-
1000000

$ convert xc: -precision 6 -format '%[fx:1000*1000]\n' info:-
1e+06

答案 2 :(得分:0)

对shell命令的这种修改似乎有效:

find . -name *.jpg -exec convert {} -format "%[fx:w*h]" info: \;  | xargs printf "%0.0f\n" > sizes.txt

调整格式化指令printf "%0.0f\n"以满足您的需求。

仅用于演示目的(这与我的系统上的find etc和.jpg文件的工作方式相同):

$ cat data.txt

949200
960000
1.098e+06
1.038e+06
1.1664e+06
1.0824e+06
831600

$ cat data.txt | xargs printf "%0.0f\n"

949200
960000
1098000
1038000
1166400
1082400
831600