You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:12:19