Как указать SixLabors.ImageSharp записывать метаданные в формате tEXt, а не zTXt?C#

Место общения программистов C#
Anonymous
Как указать SixLabors.ImageSharp записывать метаданные в формате tEXt, а не zTXt?

Сообщение Anonymous »

Я создаю редактор для карточек персонажей TavernAI, который кодирует данные персонажей в текстовое поле EXIF.
Поначалу казалось, что он работает нормально, пока я не загрузил карточку персонажа в Silly Tavern. , популярного форка TavernAI, в котором говорилось, что метаданных персонажей нет. Оказывается, ImageSharp помещал длинные текстовые метаданные в формат zTXt, который не поддерживается спецификацией.
Вот как я подошел к сохранению карты символов:

Код: Выделить всё

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png.Chunks;
using SixLabors.ImageSharp.PixelFormats;

using var image = new Image(1, 1);

var imageMetadata = image.Metadata.GetPngMetadata();

var metadataList = (List)imageMetadata.TextData;
metadataList.RemoveAll(m => m.Keyword == "chara");

var aLotOfText = new string('a', 50000); // It seems to compress only if the text is big
var metadataEntry = new PngTextData("chara", aLotOfText, string.Empty, string.Empty);
metadataList.Add(metadataEntry);

image.SaveAsPng("test.png");
Вы можете проверить, что он выводит метаданные zTXt, запустив exiftool -v test.png. Есть ли способ указать SixLabors.ImageSharp записывать длинные фрагменты метаданных как tEXt, а не как zTXt?


Подробнее здесь: https://stackoverflow.com/questions/778 ... d-not-ztxt

Вернуться в «C#»