C# 实现修改图片文件详细信息中的属性值


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值有大部分是乱码,只有部分是正常的。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM