我通常想提出更准确的问题,但在这个问题上,我找不到任何好的开始。
用C#编写,我试图在图像中添加一个大的自定义文本块,并使用JPEG或PNG保存。我已经找到了很多关于使用Comments或UserComments标签的例子,它们在文本相对较短时起作用。在我的情况下,我需要添加潜在的大块文本,让我们说高达256K。我找到了对“自定义块”的引用,但是我找不到有关如何从C#编写和读取它们的任何好的指针,而无需编写完整的自定义JPG或PNG编码器。
答案 0 :(得分:1)
我不确定JPG,但是PNG具有分块格式,因此应该很容易将自定义块添加到现有解码器将忽略的(写得很好)的文件中。这个块可以包含你想要放入的任何数据。
您也不需要编写完整的PNG解码器,只需查找自定义块并进行读/写即可。
编辑:JPEGs use segments(请参阅第2页)以分隔文件。根据我的研究,我没有看到任何添加自定义段的方法 - 但是可以使用未使用的段ID(解码器将跳过),如JPG0,JPG13,DHP,EXP或其他。您甚至可以跨多个块拆分数据以增加存储空间(正如@BitBank所指出的那样)。
希望这有帮助!
答案 1 :(得分:1)
您还可以尝试this library,它允许读/写所有标准块(包括三个文本块)。最后一个样本here创建了一个文本块。
答案 2 :(得分:0)
作为最简单,基本的想法(例如'脏黑客'):您不必“编写完整的自定义JPG或PNG编码器”。你可以像往常一样保存,然后打开文件,把东西放在“自定义块”中并保存。
您可能需要解析一些JPG / PNG标头信息,以了解您可以放置块的偏移量,甚至可能需要使用新的偏移更新某些标头,但总体而言这可能是不像写一个完整的编码器那么多。
请注意:我不推荐这种方法,但是如果所有其他选项都是太多的工作,太复杂或者其他什么,那么这至少是一个可以考虑的选项。 另外,我从头脑中不知道这一点,但格式可能实际上甚至不支持“非图像数据”这样的“大”块。
如果您的应用程序是使用图像的唯一应用程序,您可能只是考虑用您自己的“格式”“包装”原始文件(可以是包含图像+文本作为单独文件的zip / gz流中的任何内容)单个文件,可以是您自己的自定义文件格式)