이 방법으로 이미지의 크기를 조정할 수 있으며 XMP 데이터를 제외한 모든 메타 데이터를 새 이미지에 입력 할 수있었습니다. 이제는 C++에서 XMP 부분을 관리하는 방법에 대한 주제 만 찾을 수 있지만 C#에서는 필요합니다. 내가 얻은 가장 가까운 것은 xmp-sharp project이며 Adobe의 SDK의 일부 이전 포트를 기반으로합니다. 그러나 저를 위해 작동하지 않습니다. 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);
}
}