当前位置:编程学习 > C#/ASP.NET >>

关于编辑jpg图片后保留EXIF信息的问题

请问如何在编辑jpg图片(改变图片尺寸,在图片上写字,加水印等操作)后仍然保留EXIF信息呢? --------------------编程问答-------------------- can'nt write chinese 
up~~ --------------------编程问答-------------------- study~~ --------------------编程问答-------------------- SetPropertyItem --------------------编程问答-------------------- ki1381 鍙互璇︾粏瑙i噴涓€涓嬪悧? --------------------编程问答-------------------- Hi ki1381,

I can not write Chinese...

Could u give some more detail description to SetPropertyItem method?

Thanks! --------------------编程问答-------------------- 好像不行巴 --------------------编程问答-------------------- 给你个设置详细描述的Demo吧,请参考
 
       /// <summary>
        /// 为JPEG文件设置详细描述
        /// </summary>
        /// <param name="Filename">文件名</param>
        /// <param name="NewDescription">详细描述</param>
        public static void SetDescriptionInJPEG(string Filename, string NewDescription)
        {
            try
            {
                Image Pic;
                PropertyItem[] PropertyItems;
                byte[] bDescription = new Byte[NewDescription.Length];
                int i;
                string FilenameTemp;
                System.Drawing.Imaging.Encoder Enc = System.Drawing.Imaging.Encoder.Transformation;
                EncoderParameters EncParms = new EncoderParameters(1);
                EncoderParameter EncParm;
                ImageCodecInfo CodecInfo = GetEncoderInfo("image/jpeg");

                // copy description into byte array
                for (i = 0; i < NewDescription.Length; i++) bDescription[i] = (byte)NewDescription[i];

                // load the image to change
                Pic = Image.FromFile(Filename);

                // 设置详细信息
                PropertyItems = Pic.PropertyItems;
                PropertyItems[0].Id = 0x010E; //ID = 0x010E为详细描述。详见MSDN中 关于EXIF ID 的介绍
                PropertyItems[0].Type = 2;
                PropertyItems[0].Len = NewDescription.Length;
                PropertyItems[0].Value = bDescription;
                Pic.SetPropertyItem(PropertyItems[0]);

                // 因为不能直接保存在原来的图片上,所以先产生个临时文件
                FilenameTemp = pub.g_str_WorkFile + ".temp";

                // GDI+中,旋转90度的倍数不会导致画质损失
                EncParm = new EncoderParameter(Enc, (long)EncoderValue.TransformRotate90);
                EncParms.Param[0] = EncParm;

                // 把详细描述写入临时图片
                Pic.Save(FilenameTemp, CodecInfo, EncParms);

                // 释放资源
                Pic.Dispose();
                Pic = null;
                GC.Collect();

                // 删除原始图
                System.IO.File.Delete(Filename);

                // 转回去
                Pic = Image.FromFile(FilenameTemp);
                EncParm = new EncoderParameter(Enc, (long)EncoderValue.TransformRotate270);
                EncParms.Param[0] = EncParm;
                Pic.Save(Filename, CodecInfo, EncParms);

                // 释放资源
                Pic.Dispose();
                Pic = null;
                GC.Collect();

                // 删除临时文件
                System.IO.File.Delete(FilenameTemp);
            }
            catch
            {

            }
        } --------------------编程问答-------------------- mark --------------------编程问答--------------------
引用 7 楼 ki1381 的回复:
给你个设置详细描述的Demo吧,请参考

///    <summary>
///   为JPEG文件设置详细描述
///    </summary>
///    <param   name= "Filename "> 文件名 </param>
///    <param   name= "NewDescription "> 详细描述 </param>
public   static   void   SetDescriptionInJPEG(string   Filename,   string   NewDescription)
{
try
{
Image   Pic;
PropertyItem[]   PropertyItems;
byte[]   bDescription   =   ne…

这样写怎么能保证description符合exif标准,让其他已有的读取exif信息的程序能够正确读出我们所写入的内容呢? --------------------编程问答-------------------- 7楼的方法可以试试。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,