2

我在终端中有一个小的单行代码,它将许多 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部分中执行此操作,或者将输出通过管道传输到另一个命令进行转换。谢谢!

4

3 回答 3

3

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

转换 w*h 科学计数法输出会丢失有效数字,因此最好分别输出 w 和 h 并相乘。

使用 bc 这将是:

find . -name '*.jpg' -exec convert {} -format "%w*%h" info: \; |bc
于 2012-06-06T14:24:15.227 回答
1

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

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

$ convert xc: -precision 6 -format '%[fx:1000*1000]\n' info:-
1e+06
于 2018-12-09T13:27:59.880 回答
0

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

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

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

仅用于演示目的(这与在我的系统上找到的 find 等和 .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
于 2012-06-06T14:23:09.987 回答