1

我正在使用convertImageMagick 的实用程序将原始图像字节转换为可用的图像格式,例如 PNG。我的原始文件是由代码生成的,所以没有任何标题,只有纯像素。

为了转换我的图像,我正在使用命令:

$ convert -depth 1 -size 576x391 -identify gray:image.raw image.png
gray:image.raw=>image.raw GRAY 576x391 576x391+0+0 1-bit Gray 28152B 0.010u 0:00.009

宽度是固定的,我很熟悉。但是,我每次都必须根据文件大小来评估图像的高度,这很烦人。

如果没有指定高度或指定了错误的高度,该实用程序包含:

$ convert -depth 1 -size 576 -identify gray:image.raw image.png
convert-im6.q16: must specify image size `image.raw' @ error/gray.c/ReadGRAYImage/143.
convert-im6.q16: no images defined `image.png' @ error/convert.c/ConvertImageCommand/3258.
$ convert -depth 1 -size 576x390 -identify gray:iphone.raw iphone.png
convert-im6.q16: unexpected end-of-file `image.raw': No such file or directory @ error/gray.c/ReadGRAYImage/237.
convert-im6.q16: no images defined `image.png' @ error/convert.c/ConvertImageCommand/3258.

所以我想知道有没有办法根据文件/blob大小自动检测图像高度?

4

2 回答 2

1

您必须知道 -depth 和 width 才能计算 ImageMagick 原始格式的高度。如果深度为 1,则您的图像是二进制 (b/w)。所以高度 = 8 * 文件大小(以 B 为单位)/(宽度)。28152*8/391 = 576

于 2021-03-23T05:14:34.197 回答
1

几个想法...

您可能不知道NetPBM格式,但它非常简单,您可以更改创建原始图像的软件,以便它直接生成OpenCVPhotoshopGIMPfehPBM可读和可用的格式图像,当然是eogImageMagick。它不需要您的软件中的任何库或额外的依赖项,您只需在前面放一个文本标题,因此您的文件如下所示:PBM

P4
576 391
... YOUR EXISTING BINARY DATA ...

P4不要忘记在 . 之后和之后放置换行符(即换行符)391

您可以自己尝试并在其中一个文件上添加标题,然后使用GIMP或其他工具查看它:

printf "P4\n576 391\n"    >  image.pbm
cat image.raw             >> image.pbm

如果您更喜欢单行,只需使用这样的bash 命令分组- 相当于上面的 2 行:

{ printf "P4\n576 391\n"; cat image.raw; } > image.pbm

小心让所有的空格和分号和我的完全一样!


bash 另一个想法,只是在 Fred 的答案上加上一些肉,可能是以下使用算术上下文bash 命令替换的单行代码,您可以这样做:

convert -depth 1 -size "576x$(($(stat -c "%s" image.raw)*8/576))" gray:image.raw image.png

请注意,如果您在macOS上,stat则略有不同,因此您可能更喜欢效率稍低但更便携的版本:

convert -depth 1 -size "576x$(($(wc -c < image.raw)*8/576))" gray:image.raw image.png
于 2021-03-23T10:23:10.900 回答