在Linux上有哪些软件可以显示原始位图?

我有一个原始文件,但我不知道像素格式或图像的宽度。我需要一个工具,可以快速显示数据并允许我轻松尝试不同的格式。在Windows上,这样的工具的一个例子是7yuv。在Linux上有哪些软件适用于这个任务?
注意:这与数码相机的原始文件无关,这使得我很难通过谷歌来回答这个问题。

7yuv


我猜测有很多可用的选择(在软件库中进行快速搜索可能会给你带来足够多的结果)。不过,我比较喜欢的是Digikam(虽然我还没有尝试过其他很多软件)。我也确信GIMP有一个插件可以查看和处理原始文件。 - VasPle
搜索仓库没有找到合适的内容。此外,这些也不是问题中所述的相机原始文件。 - Alistair Buxton
你也可以在Linux上通过WINE使用7yuv。它有一个银色评级,所以很可能能够正常运行...如果你找不到任何适用于Linux的本地替代品,不妨试试看。 - VasPle
3个回答

原來Gimp可以做到這一點。只需以原始格式打開文件,您就會得到一個有用的對話框,讓您預覽圖像。

enter image description here


1你如何打开原始数据文件? - Val
文件->打开然后将文件类型更改为原始。 - Alistair Buxton
2这只适用于RGB。你如何打开灰度(8位)原始格式? - Nathan B
打开,你能打开灰度模式吗? - Nathan B

从ImageMagick转换

例如,一个8位2x3灰度图像:

printf '\x00\xFF\x88\xFF\x00\xFF' > in.bin

然后:

convert -depth 8 -size 3x2+0 gray:in.bin out.png

命令解释:
- 深度 8:每个颜色有 8 位 - 尺寸 2x3+0:2x3 图像。+0 表示从文件的偏移量 0 开始。如果有元数据头,可以通过偏移量跳过它们。 - gray:in.bin:输入文件为 in.bin,并且格式为 gray,如 http://www.imagemagick.org/script/formats.php 中所定义。这种奇怪的表示法是因为 ImageMagick 通常根据扩展名确定格式,但这里没有扩展名。
如何查看像这个例子一样的微小输出
现在的问题是如何准确地查看这个微小的 3x2 输出。直接使用 eog:
eog out.png

不太好,因为图像太小了,如果你放大很多,eog会使用一个连续混合像素的显示算法,这对大多数图片来说是更好的,但对于如此微小的图像来说并不适用。

一个好的可能性是运行:

convert out.png -scale 300x out2.png

或者直接一次完成:

convert -depth 8 -size 3x2+0 gray:in.bin -scale 300x out.png

需要使用-scale而不是-resize,因为-resize默认情况下会像eog一样连续混合像素颜色。

输出:

enter image description here

另一个选项是在Gimp中查看它。
gimp out.png

图像编辑器(如Gimp)在足够放大的情况下,必须单独显示每个像素。 RGB示例
printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > in.bin
convert -depth 8 -size 3x1+0 rgb:in.bin out.png

或者使用-scale来使其更易查看:
convert -depth 8 -size 3x1+0 rgb:in.bin -scale 300x out.png

enter image description here

相关内容: 在Ubuntu 16.04和ImageMagick 6.8.9上进行了测试。

1这是一个不错的解决方案。我根据我的输入编写了脚本,它始终都能正常工作。 - C--
如何将每个像素填充为16位(2字节)的10位单色图像进行转换? - Nathan B
@NathanB 我不知道,也没能在快速搜索中找到,我会在Python中预处理它,如果你找到了内置的方法,请告诉我。 - Ciro Santilli OurBigBook.com
是的,找到了方法:convert -depth 16 -size 2688x1944+0 gray:a.png - Nathan B

这个 Python 代码片段可以实现这个功能:
from PIL import Image
import numpy as np


raw_img = np.fromfile("image",  dtype=np.uint8)
l = int(np.sqrt(raw_img.shape[0]/4))  # for a l x l square image
Image.frombytes(mode='RGBA', size=(l, l), data=raw_img).show()