我在终端有一个小的单线程,用于将许多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 部分中执行此操作,或者将输出传递给另一个命令进行转换。谢谢!
答案 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