Tiff图片元数据写入并保存
/// <summary>
/// 通过解码器与编码器写入元数据
/// </summary>
/// <param name="inputPath">原图片全路径</param>
/// <param name="outputPath">新图片全路径</param>
/// <param name="comment">内容</param>
/// <returns>带有元数据的内存流</returns>
public void DecoderAndEncoderSaveTif(string inputPath, string outputPath, string comment)
{
var src = inputPath;
var bitmapEncoder = new TiffBitmapEncoder();
FileStream stream = new FileStream(inputPath, FileMode.Open);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Close();
MemoryStream ms = new MemoryStream(bytes, true);
var bitmapDecoder = new TiffBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var frame = bitmapDecoder.Frames[0];
var metadata = (BitmapMetadata)frame.Metadata.Clone();
metadata.SetQuery("/ifd/{uint=269}", comment);
var newFrame = BitmapFrame.Create(frame, frame.Thumbnail, metadata, frame.ColorContexts);
bitmapEncoder.Frames.Add(newFrame);
MemoryStream msnew = new MemoryStream();
bitmapEncoder.Save(msnew);
Image image = Image.FromStream(msnew);
image.Save(outputPath);
ms.Close();
msnew.Close();
}
Jpg图片元数据写入并保存
public void DecoderAndEncoderSaveJpg(string inputPath, string outputPath, string comment)
{
FileStream stream = new FileStream(inputPath, FileMode.Open);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Close();
MemoryStream ms = new MemoryStream(bytes, true);
BitmapDecoder decoder = new JpegBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var frame = decoder.Frames[0];
var metadata = (BitmapMetadata)frame.Metadata.Clone();
object obj = metadata.GetQuery("/app1/ifd/exif:{uint=269}");
metadata.SetQuery("/app1/ifd/exif:{uint=269}", comment);
var newFrame = BitmapFrame.Create(frame, frame.Thumbnail, metadata, frame.ColorContexts);
var bitmapEncoder = new JpegBitmapEncoder();
bitmapEncoder.Frames.Add(newFrame);
MemoryStream msnew = new MemoryStream();
bitmapEncoder.Save(msnew);
Image image = Image.FromStream(msnew);
image.Save(outputPath);
ms.Close();
msnew.Close();
}