我试图读取像图像这样的文件,但是当我尝试用记事本打开它们时,我发现了奇怪的代码:
ÿH‹\$0H‹t$8HƒÄ _ÃÌÌÌÌÌÌH‰\$H‰l$H‰t$ WAVAWHƒì ·L
所以我有以下问题:
谢谢
答案 0 :(得分:1)
大多数数据文件(如图片)都存储为hexadecimal。如果您知道文件的格式,可以使用十六进制编辑器(我使用HexEdit)来查看数据。
颜色通常存储为RGB,表示红色,绿色或蓝色,例如,这是一个深红色:
80 00 00 // (there are no spaces in the real file format, but hex editors add them.)
图像的格式取决于图像的存储方式。大多数图像格式都有编码像素之间差异的方法而不是实际像素本身,因为不同像素之间存在大量信息冗余。
例如,如果我有一张聚焦在月球上的夜空照片,那么在一个角落可能有一个大的区域,它们的颜色大致相同;没有优化的编码意味着很多文件只会读到:
9080b09080b09080b09080b09080b09080b09080b59080b59080b5...
在这种情况下,灰色略带蓝紫色,最后趋向于更亮的蓝色。我在这里将它存储为RGB - R:90,G:80,B:b0 - 但该存储也有其他格式。 Try them out here.
而不是列出每个像素,我可以同样地说“6大量的蓝灰色然后它变得更亮蓝色”:
=6x9080b0+3x000005+...
这减少了我需要传输的信息量。大多数优化都不是人类可读的,但是它们在类似的行上运行(这是一般信息原则,用于各种事物,如.zip文件,而不仅仅是图像)。
请注意,这仍然是无损格式;我总能回到实际的像素完美图像。 Bitmaps(。bmp)是无损的(虽然显然仍然是数字的;它们永远不会捕获人类看到的一切)。
许多格式使用图像的频率对信息进行编码。这有点像看波浪形式的音乐,除了它是二维的。根据采样频率,信息可能很容易丢失(通常是)。 JPEGs(.jpg)使用这样的有损压缩。
您看到ASCII字符的原因是因为某些值恰好与ASCII文本代码一致。这纯属巧合;记事本正在尽力解释什么是基本的胡言乱语。例如这个颜色序列:
4e4f424f4459
恰好与字母“NOBODY”重合,但也代表彼此相邻的两个像素。两者都是灰色的,特别是左边(R:4e,G:4f,B:42),最右边的是蓝色(R:4f,G:44,B:59)。
但是,只有当你的格式存储原始像素信息时......这是昂贵的,所以情况可能并非如此。
图像格式是一个非常专业的领域。着名的XKCD漫画"Digital Data"展示了其中一些漫画的优化。这就是为什么,一般来说,你不应该使用JPEG作为文本,而是使用类似PNG(。png)的内容。