C# 写入图片元数据
2018-01-12 13:59
183 查看
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();
}
/// <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();
}
相关文章推荐
- [转帖]如何将一张图片写入数据库SQL,并能正确在C#网页中显示
- 转载:c# winform下sql图片二进制存储/读取/显示/写入XML/读取XML显示
- ASP.NET实现写入和读取图片(C#+SQL Server)
- c# 图片二进制存储SQL/读取SQL/显示Image/写入XML/读取XML显示
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- c# winform下sql图片二进制存储/读取/显示/写入XML/读取XML显示
- C#写入/读取SqlServer图片
- c# winform下sql图片二进制存储/读取/显示/写入XML/读取XML显示
- 【C#】多幅图片写入字符串string,分隔存储
- C#SoapFormatter序列化一例:将图片读写入xml文件,并能根据需要在PictureBox中按比例缩小显示
- c# winform下sql图片二进制存储/读取/显示/写入XML/读取XML显示
- 将上传图片打上防伪图片水印并写入数据库ASP.NET C#
- C# 在图片上写入水印
- c#把图片以二进制的形式写入ACCESS数据库
- C#SoapFormatter序列化一例:将图片读写入xml文件,并能根据需要在PictureBox中按比例缩小显示
- 【C#】对文本、图片、音频文件的读取与写入
- C#将文字写入图片
- c#客户端图片上传到服务器端文件并且把路径保存到SQL数据库
- C#合并保存多个图片Image