イメージのサイズを変更するこの方法があり、XMPデータ以外のすべてのメタデータを新しいイメージに入力することができました。今、私はC++でXMPの部分をどのように管理するかについての話題しか見つけることができませんが、C#でそれを必要としています。私が得た最も近いものは、AdobeのSDKの古いポートに基づいているxmp-sharp projectですが、それは私のために働くことができません。 MetaDataExtractor projectは私には同じ結果、つまりファイルフォーマット/エンコーディングがサポートされていないことを示しています。私は.jpg、.png、.tifファイルでこれを試しました。C#でXMPメタデータを読み書きするにはどうすればよいですか?
C#でXMPを読み書きする良い方法はありませんか?ここで
は、それが任意のヘルプ(すべての無関係な部分を省略)のかどう私のコードです:
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);
}
}