C#中可以通过 System.Drawing.Imaging.PropertyItem 来获取和设置 Image 的属性值,不过在获取 Image 的 PropertyItem 属性值时需要指定属性的ID,PropertyItem 的ID可以通过 Image.PropertyItems 获得,通过这一点我们可以很简单的实现设置图片属性的功能。
命名空间:
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
功能实现:
获取Image中的所有属性:
private List<string> GetPropertyItems(string fileName)
{
List<string> result = new List<string>(0);
if (File.Exists(fileName))
{
FileStream fm = new FileStream(fileName, FileMode.Open);
Image Img = Image.FromStream(fm);
foreach (PropertyItem i in Img.PropertyItems)
{
//如果不清楚PropertyItem的Id可以通过枚举获得
//Console.WriteLine("Value:{0},ID:{1}",Encoding.Unicode.GetString(i.Value),i.Id);
result.Add(Encoding.Unicode.GetString(i.Value));
}
fm.Dispose();
Img.Dispose();
}
return result;
}
设置Image中的属性并保存:
private void SetPropertyInfo(string fileName,string newName, int propId,string value)
{
if (File.Exists(fileName))
{
FileStream fm = new FileStream(fileName, FileMode.Open);
Image Img = Image.FromStream(fm);
PropertyItem pi = Img.PropertyItems[0];
pi.Id = propId; //40094
pi.Type = 1;
pi.Value = Encoding.Unicode.GetBytes(value);
pi.Len = pi.Value.Length;
Img.SetPropertyItem(pi);
//File.Delete(fileName);
//Img.Save(fileName);
Img.Save(newName);
fm.Dispose();
Img.Dispose();
}
}
调用:
去除指定图片的Tag(标记)属性并输出:
//清除图片的标记属性 PropertyItem.Id : 40094
SetPropertyInfo("C:\\Users\\Administrator\\Desktop\\Old.jpg","C:\\Users\\Administrator\\Desktop\\New.jpg",40094,null);
需要注意的是获取的PropertyItem的Value值有大部分是乱码,只有部分是正常的。