Çeşitli meta manipülasyonlar sağlar aşağıdaki sınıfını yazdı. Bunu şu şekilde kullanırsınız:
var jpeg = new JpegMetadataAdapter(pathToJpeg);
jpeg.Metadata.Comment = "Some comments";
jpeg.Metadata.Title = "A title";
jpeg.Save(); // Saves the jpeg in-place
jpeg.SaveAs(someNewPath); // Saves with a new path
Çözümüm ve diğerleri arasındaki farklar büyük değil. Esas olarak, daha temiz olmak için bunu yeniden düzenledim. Ayrıca SetQuery
yönteminden ziyade BitmapMetadata
'un daha yüksek düzey özelliklerini kullanıyorum.
İşte the MIT licence altında lisanslanmıştır tam koddur. Sen PresentationCore
, WindowsBase
ve System.Xaml
başvuruları eklemeniz gerekir.
public class JpegMetadataAdapter
{
private readonly string path;
private BitmapFrame frame;
public readonly BitmapMetadata Metadata;
public JpegMetadataAdapter(string path)
{
this.path = path;
frame = getBitmapFrame(path);
Metadata = (BitmapMetadata)frame.Metadata.Clone();
}
public void Save()
{
SaveAs(path);
}
public void SaveAs(string path)
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(frame, frame.Thumbnail, Metadata, frame.ColorContexts));
using (Stream stream = File.Open(path, FileMode.Create, FileAccess.ReadWrite))
{
encoder.Save(stream);
}
}
private BitmapFrame getBitmapFrame(string path)
{
BitmapDecoder decoder = null;
using (Stream stream = File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
decoder = new JpegBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
return decoder.Frames[0];
}
}
Yararlı bulursanız, oy vermeli ve/veya cevaplarını kabul etmelisiniz. Şerefe! – RickL
Oops, Yukarıdaki çözümümde küçük bir hata yaptım. Sana PresentationCore referansı değil System.Core Ps eklemem gerekiyor söyledi gerekirdi. Baştaki Rick için teşekkürler! Bunu hemen yapacağım. –
jpeg, kayıplı bir formattır Bu yöntemi kullanarak meta verileri ekleyerek kalitesini kaybetmeye beklenebilir, yoksa sadece resmi etkilemeden meta verileri değiştirebilir olmadığını göz önüne alındığında? –