我通常喜欢问更精确的问题,但在这个问题中我还没有找到任何好的开始。
用 C# 编写,我正在尝试向图像添加一个大的自定义文本块,并使用 JPEG 或 PNG 保存它。我发现了很多关于使用 Comments 或 UserComments 标签的例子,它们在文本相对较短的情况下起作用。在我的情况下,我需要添加潜在的大块文本,假设最多 256K。我找到了对“自定义块”的引用,但我找不到任何关于如何从 C# 编写和读取它们的好指针,而无需编写完整的自定义 JPG 或 PNG 编码器。
我不确定 JPG,但 PNG 具有分块格式,因此应该很容易将自定义块添加到(编写良好的)现有解码器将忽略的文件中。该块可以包含您要放入其中的任何数据。
您也不需要编写完整的 PNG 解码器,只需查找您的自定义块并读/写它。
编辑:JPEG 使用分段(参见第 2 页)来分隔文件。根据我的研究,我没有看到任何添加自定义片段的方法 - 但可以使用未使用的片段 ID(将被解码器跳过),如 JPG0、JPG13、DHP、EXP 或其他。您甚至可以将数据拆分到多个块中以增加存储空间(正如@BitBank 所指出的那样)。
希望这可以帮助!
作为最简单、基本的想法(例如'dirty hack'):您不必“编写一个完整的自定义 JPG 或 PNG 编码器”。您可以像往常一样保存,然后打开文件,将“自定义块”中的内容放入并保存。
您可能需要解析一些 JPG/PNG 标头信息以了解可以放置块的偏移量,甚至可能需要使用新偏移量更新一些标头,但总而言之,这可能不是像编写一个完整的编码器一样工作。
请注意:我不推荐这种方法,但如果所有其他选项工作量太大、太复杂或其他任何选项,那么至少这是一个可以考虑的选项。另外,我不知道这一点,但是这两种格式实际上可能甚至不支持如此“大”的“非图像数据”块。
如果您的应用程序是唯一使用图像的应用程序,您可以简单地考虑以您自己的“格式”“包装”原始文件(可以是从包含图像+文本作为单独文件的 zip/gz 流到单个文件的任何内容可以是您自己的自定义文件格式)