Der folgende Code löst mein Problem und fügt Kommentare zu einem bestimmten JPEG-Bild:
public void addImageComment(string imageFlePath, string comments)
{
string jpegDirectory = Path.GetDirectoryName(imageFlePath);
string jpegFileName = Path.GetFileNameWithoutExtension(imageFlePath);
BitmapDecoder decoder = null;
BitmapFrame bitmapFrame = null;
BitmapMetadata metadata = null;
FileInfo originalImage = new FileInfo(imageFlePath);
if (File.Exists(imageFlePath))
{
// load the jpg file with a JpegBitmapDecoder
using (Stream jpegStreamIn = File.Open(imageFlePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
decoder = new JpegBitmapDecoder(jpegStreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
bitmapFrame = decoder.Frames[0];
metadata = (BitmapMetadata)bitmapFrame.Metadata;
if (bitmapFrame != null)
{
BitmapMetadata metaData = (BitmapMetadata)bitmapFrame.Metadata.Clone();
if (metaData != null)
{
// modify the metadata
metaData.SetQuery("/app1/ifd/exif:{uint=40092}", comments);
// get an encoder to create a new jpg file with the new metadata.
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapFrame, bitmapFrame.Thumbnail, metaData, bitmapFrame.ColorContexts));
//string jpegNewFileName = Path.Combine(jpegDirectory, "JpegTemp.jpg");
// Delete the original
originalImage.Delete();
// Save the new image
using (Stream jpegStreamOut = File.Open(imageFlePath, FileMode.CreateNew, FileAccess.ReadWrite))
{
encoder.Save(jpegStreamOut);
}
}
}
}
}
Dies ist im Wesentlichen eine leicht modifizierte Version des Codes unter dem Link gefunden, die Konamiman freundlich versorgt.
Bitte beachten Sie, dass diese Arbeit zu machen, müssen Sie .NET Verweise auf PresentationCore und Windows hinzuzufügen. Bei der Verwendung von Visual Studio 2008, kann dies über folgenden erreicht werden:
Rechtsklick auf das Projekt im Solution Explorer
aus der Dropdown-Liste wählen Sie Add 'Reference ...'
Von der neuen Box, die, wählen Sie das ‚.NET‘ Tab
Blättern Sie zu den beiden Referenzen oben erwähnt, und auf jedem öffnet, klicken Sie auf oK
Vielen Dank an danbystrom und Konamiman für Ihre Hilfe in dieser Angelegenheit. Ich schätze die schnelle Antwort sehr.
Sie sollten abstimmen und/oder ihre Antworten akzeptieren, wenn Sie sie hilfreich fanden. Prost! – RickL
Hoppla, mit meiner obigen Lösung habe ich einen kleinen Fehler gemacht. Ich hätte sagen sollen, dass Sie die PresentationCore Referenz hinzufügen müssen, nicht die System.Core Ps. Danke für das Heads-up Rick! Ich werde das sofort machen. –
Angesichts der Tatsache, dass JPEG ein verlustbehaftetes Format ist, würden Sie erwarten, die Qualität zu verlieren, indem Sie Metadaten mit dieser Methode hinzufügen, oder ändert dies nur die Metadaten, ohne das Bild zu beeinflussen? –