如何让SixLabors.ImageSharp以tEXt而非zTXt格式写入元数据?
解决SixLabors.ImageSharp强制以tEXt格式存储长元数据的问题
要让ImageSharp不管文本长度都使用tEXt格式而非zTXt,关键是手动关闭PngTextData的压缩功能。默认情况下,当文本内容较长时,ImageSharp会自动启用压缩并生成zTXt块,只需显式指定压缩方法为无即可强制使用tEXt。
修改后的代码实现
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.PixelFormats; using var image = new Image<Rgba32>(1, 1); var imageMetadata = image.Metadata.GetPngMetadata(); var metadataList = (List<PngTextData>)imageMetadata.TextData; metadataList.RemoveAll(m => m.Keyword == "chara"); var aLotOfText = new string('a', 50000); // 显式设置压缩方法为无,强制生成tEXt块 var metadataEntry = new PngTextData("chara", aLotOfText, string.Empty, string.Empty) { CompressionMethod = PngCompressionMethod.None }; metadataList.Add(metadataEntry); image.SaveAsPng("test.png");
验证方法
执行命令exiftool -v test.png查看输出,此时元数据应该以tEXt块的形式存在,而非zTXt。
内容的提问来源于stack exchange,提问作者user19297321
相关产品推荐
相关产品推荐

