У меня есть этот метод для изменения размеров изображений, и мне удалось ввести все метаданные в новое изображение, кроме данных XMP. Теперь я могу только найти темы о том, как управлять частью XMP на C++, но мне нужно это в C#. Самый близкий я получил xmp-sharp project, который основан на каком-то старом порту SDK от Adobe, но я не могу заставить это работать для меня. MetaDataExtractor project дает мне те же результаты - то есть формат файла/кодировка не поддерживается. Я пробовал это с файлами .jpg, .png и .tif.Как читать и писать метаданные XMP в C#?
Нет ли хорошего способа чтения и записи XMP в C#?
Вот мой код, если это какой-либо помощи (опуская все ненужные части):
public Task<Stream> Resize(Size size, Stream image)
{
using (var bitmap = Image.FromStream(image))
{
var newSize = new Size(size.Width, size.Height);
var ms = new MemoryStream();
using (var bmPhoto = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
{
// This saves all metadata except XMP
foreach (var id in bitmap.PropertyIdList)
bmPhoto.SetPropertyItem(bitmap.GetPropertyItem(id));
// Trying to use xmp-sharp for the XMP part
try
{
IXmpMeta xmp = XmpMetaFactory.Parse(image);
}
catch (XmpException e)
{
// Here, I always get "Unsupported Encoding, XML parsing failure"
}
// Trying to use MetadataExtractor for the XMP part
try
{
var xmpDirs = ImageMetadataReader.ReadMetadata(image).Where(d => d.Name == "XMP");
}
catch (Exception e)
{
// Here, I always get "File format is not supported"
}
// more code to modify image and save to stream
}
ms.Position = 0;
return Task.FromResult<Stream>(ms);
}
}