我正在编写一个强制文件格式化的脚本。它所做的一件事是确保所有文本文件都以换行符结尾。
我不确定的一个领域是.hdr
文件。这些是图像,Linuxfile
命令说它们是Radiance HDR image data
,但它们可以用文本编辑器打开,并且脚本将它们解释为文本文件。因此,脚本会自动将换行符附加到这些文件。
这是好事吗?这种文件类型如何使用?这些图像文件是否有任何用例可以作为文本读取?让这些文件以换行符结尾有什么缺点吗?我是否应该在脚本中添加例外以排除hdr
文件?
答案1
脚本会自动将换行符添加到这些 [
.hdr
] 文件中。这是好事吗?
不。但可能也不错。关于格式 [重点是我的]:
该文件以签名开头
#?RADIANCE
,然后是几行列出用于生成图像的命令。[…] 其中还有一些key=value
声明,包括以下行FORMAT=32-bit_rle_rgbe
。之后是空白行,表示标题结束。一行描述分辨率和像素顺序。Radiance 工具生成的格式始终为
-Y height +X width
。此行之后是二进制像素数据。
(来源)
我从以下位置下载了一个.hdr
文件(nancy_church_1.hdr
本网站。我在副本中添加了换行符,甚至附加了另一个文件。我用 进行了测试luminance-hdr
,该工具没有报错。
我并不感到惊讶。解决方案是已知的;根据这个描述每个像素有四个字节,即使涉及游程编码 (rle),仍然很容易知道何时停止解释二进制像素数据。而且没有我们可以破坏的页脚。
其他工具也可能会抱怨,也可能不会。
即使无害,在.hdr
文件中添加换行符也没有任何意义。人们可能希望添加缺失的换行符,以满足以下要求之一:有关文本文件的 POSIX 要求,但.hdr
文件从设计上来说就不是文本文件。没什么可修复的。
对明确问题的答案:
文件扩展名的文件是否应
hdr
以换行符结尾?
由于语义原因,这个问题有些棘手。不,它们不应以解释为换行符的字符结尾。0x0a
但它们可以以字节结尾。作为二进制像素数据的一部分,0x0a
不应将其解释为换行符。
该文件类型如何使用?
作为图形。
这些图像文件是否有被读取为文本的用例?
您可以阅读标题和描述分辨率和像素顺序的行。您不应该尝试阅读所有的文件为文本。
让这些文件以换行符结尾有什么缺点吗?
文件可能会占用文件系统中的更多块。除此之外很难说,有些工具可能会抱怨。没有任何好处,所以你只能让事情变得更糟或平等。
我是否应该在脚本中添加例外来排除
.hdr
文件?
我认为你应该这么做。我会的。而且我宁愿依赖命令file
,而不是扩展。