如何解决ImageMagick:猜测原始图像高度
我正在使用 ImageMagick 的 convert
实用程序将原始图像字节转换为可用的图像格式,例如 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 大小自动检测图像高度?
解决方法
您必须知道 -depth 和 width 才能计算 ImageMagick 原始格式的高度。如果深度为 1,则您的图像是二进制 (b/w)。所以高度 = 8 * 文件大小(以 B 为单位)/(宽度)。 28152*8/391 = 576
,一些想法...
您可能不知道 NetPBM 格式,但它非常简单,您可以更改创建原始图像的软件,以便它直接生成 PBM
格式的图像,这些图像是OpenCV、Photoshop、GIMP、feh、eog 和 可读和可用的strong>ImageMagick 当然。它不需要您的软件中有任何库或额外的依赖项,您只需在前面放置一个文本 PBM
标题,因此您的文件如下所示:
P4
576 391
... YOUR EXISTING BINARY DATA ...
不要忘记在 P4
和 391
之后放置换行符(即换行符)。
您可以自己尝试并像这样在您的文件之一中添加标题,然后使用 GIMP 或其他工具查看它:
printf "P4\n576 391\n" > image.pbm
cat image.raw >> image.pbm
如果您更喜欢单行,只需像这样使用 bash
command grouping - 相当于上面的 2 行:
{ printf "P4\n576 391\n"; cat image.raw; } > image.pbm
注意所有的空格和分号都和我有的完全一样!
另一个想法,只是在 Fred 的答案上加点肉,可能是以下使用 bash
arithmetic context 和 bash
command substitution 的单行,你可以这样做这个:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。