关于编辑jpg图片后保留EXIF信息的问题
请问如何在编辑jpg图片(改变图片尺寸,在图片上写字,加水印等操作)后仍然保留EXIF信息呢? --------------------编程问答-------------------- can'nt write chineseup~~ --------------------编程问答-------------------- 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 --------------------编程问答--------------------
这样写怎么能保证description符合exif标准,让其他已有的读取exif信息的程序能够正确读出我们所写入的内容呢? --------------------编程问答-------------------- 7楼的方法可以试试。
补充:.NET技术 , C#