将图片说明加入到jpg文件内,最简便的方法是:用16进制编辑器(或编个读写程序)直接把这部分信息写入jpg文件保存,不会对图像有任何影响。

  在jpg文件开始两字节是FF D8,可以在它们后面插入以下35字节(如果在FF D8后面的是FF E0块,最好插入这个块后面,这个块的长度就是那两字节的TAG标志之后的两字节,长度不包括这两字节TAG,比如FF E0块是16字节长,那么FF ED块就应该在原文件第21字节前面插入):

FF ED 00 22 50 68 6F 74 6F 73 68 6F 70 20 33 2E 30 00 38 42 49 4D 04 04 00 00 00 00 00 05 1C 02 78 00 00

  上面00 22表示这个FF ED块的长度(也是不包括TAG这两字节),注意到上面数据的字节数35-2=33,即00 21才对,但是本块最后还需要加一个00字节作为块结束符,所以预先写为00 22,后面还要修正的。所要添加的图片说明文字串应该在00结束符之前,比如“abcdef”的ASCII码是61 62 63 64 65 66,(说明文字可以用汉字),再加上结束符00。然后修改三处数字:1C 02 78是本块内的一种子块(以1C 02 ..的三字节形式为标识符,可能和FF ED信息块一样有不止一个),这种标识符后面两字(如上面的00 00)是该子块数据长度(如abcdef就应该是6字节,即00 06,不包括三字节标识符和两字节长度),这是第一处需要修正的数据;第二处是本块的第29、30两字节(如上面的00 05),修正方法是在原值基础上增加新旧说明文字改变的长度,比如原值05对应串长为0,新串若为6,即可增加6-0=6,所以原值应改为 5+6=11(即16进制的0B);最后一处如果错了JPEG图像就不能显示了,应把FF ED后面的块长度数据00 22也加上文字说明改变的长度6,即00 28,这是本块最终的总长度-2字节标志占用。然后保存文件即可。如果原来jpg文件的Exif已经有这个图片说明信息(只搜索含有1C 02 78的FF ED块),应根据同样的原理直接在上面修改,因为显示Exif信息的图片说明的时候一般以最远离文件头的数据为准。

  更多有关Exif信息访问www.exif.org,提供JEIDA制定的EXIF 2.1官方标准(1998.6.12)和2.2官方标准(2002.4)的PDF文件。

附一:写入JPEG图像EXIF信息的C#源代码

private void WriteNewDescriptionInImage(string Filename,string NewDescription) {
Image Pic;
PropertyItem[] PropertyItems;
byte[] bDescription=new Byte[NewDescription.Length];
int i;
string FilenameTemp;
Encoder Enc=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);
// put the new description into the right property item
PropertyItems=Pic.PropertyItems;
PropertyItems[0].Id=0x010e; // 0x010e as specified in EXIF standard
PropertyItems[0].Type=2;
PropertyItems[0].Len=NewDescription.Length;
PropertyItems[0].Value=bDescription;
Pic.SetPropertyItem(PropertyItems[0]);
// we cannot store in the same image, so use a temporary image instead
FilenameTemp=Filename+".temp";
// for lossless rewriting must rotate the image by 90 degrees!
EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate90);
EncParms.Param[0]=EncParm;
// now write the rotated image with new description
Pic.Save(FilenameTemp,CodecInfo,EncParms);
// for computers with low memory and large pictures: release memory now
Pic.Dispose();
Pic=null;
GC.Collect();
// delete the original file, will be replaced later
System.IO.File.Delete(Filename);
// now must rotate back the written picture
Pic=Image.FromFile(FilenameTemp);
EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate270);
EncParms.Param[0]=EncParm;
Pic.Save(Filename,CodecInfo,EncParms);
// release memory now
Pic.Dispose();
Pic=null;
GC.Collect();
// delete the temporary picture
System.IO.File.Delete(FilenameTemp);
}

附二:以下资料来源http://www.opanda.com/cn/iexif/exif.htm

  所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。文件 头中有一系列“0xFF??”格式的字符串,称为“标识”,用来标记JPEG文件的信息段。“0xFFD8”表示图像信息开始,“0xFFD9”表示图像 信息结束,这两个标识后面没有信息,而其它标识紧跟一些信息字符。

  0xFFE0 -- 0xFFEF之间的标识符称为“应用标记”,没有被常规JPEG文件利用,Exif正是利用这些信息串记录拍摄信息如快门速度、光圈值等,甚至可以包括全 球定位信息。按照Exif2.1标准对这些标识符的定义,数码相机可以把各种拍摄信息记入数码图像中,应用软件可以读取这些数据,再按照Exif2.1标 准,检索出它们的具体含义,一般包括以下一些信息:

  ImageDescription:图像描述、来源,指生成图像的工具
  Artist:作者,有些相机可以输入使用者名字
  Make:生产者,指产品生产厂家
  Model:型号,指设备型号
  Orientation:方向,有的相机支持
  XResolution/YResolution:X/Y方向分辨率
  ResolutionUnit:分辨率单位,一般为PPI
  Software:软件,显示固件Firmware版本
  DateTime:日期和时间
  YCbCrPositioning:色相定位
  ExifOffset:Exif信息位置,定义Exif信息在文件中的写入位置,有些软件不显示
  ExposureTime:曝光时间,即快门速度
  FNumber:光圈系数
  ExposureProgram:曝光程序,指程序式自动曝光的设置,各相机不同,可能是Sutter Priority(快门优先)、Aperture Priority(快门优先)等等
  ISOspeedratings:感光度
  ExifVersion:Exif版本
  DateTimeOriginal:创建时间
  DateTimeDigitized:数字化时间
  ComponentsConfiguration:图像构造(多指色彩组合方案)
  CompressedBitsPerPixel (BPP):压缩时每像素色彩位,指压缩程度
  ExposureBiasValue:曝光补偿
  MaxApertureValue:最大光圈
  MeteringMode:测光方式,平均式测光、中央重点测光、点测光等
  LightSource:光源,指白平衡设置
  Flash:是否使用闪光灯
  FocalLength:焦距,一般显示镜头物理焦距,有些软件可以定义一个系数,从而显示相当于35mm相机的焦距Maker Note (User Comment)作者标记、说明、记录
  FlashPixVersion:FlashPix版本(个别机型支持)
  ColorSpace:色域、色彩空间
  ExifImageWidth (Pixel X Dimension):图像宽度,指横向像素数
  ExifImageLength (Pixel Y Dimension):图像高度,指纵向像素数
  Interoperability:IFD通用性扩展项定义指针,和TIFF文件相关,具体含义不详
  FileSource:源文件
  Compression:压缩比。

什么是EXIF?

  Exif是英文Exchangeable Image File(可交换图像文件)的缩写,最初由日本电子工业发展协会(JEIDA -- Japan Electronic Industry Development Association) 制订,目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system)可能以Exif2.1为基础。

  Exif文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。

  简单来说,EXIF信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我 们熟知的JPEG/TIFF文件的头部,也就是说EXIF信息是镶嵌在JPEG/TIFF图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、 ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻 瓜相机的日期打印功能一样,只不过EXIF信息所记录的资讯更为详尽和完备。

什么是GPS?

  GPS,Global Positioning System(全球卫星定位系统),是美国从20世纪70年代开始耗巨资研制,于1994年全面建成,具有在海、陆、空进行全方位实时三维导航与定位能力 的新一代卫星导航与定位系统。越来越多的数码相机厂商也开始在他们的新产品里提供了GPS功能的支持,(如Kodak DCS760等)可将照片拍摄瞬间所处经度、纬度、海拔的三维空间定位数据记载在图片里,只要图片里保留了完整的GPS信息,IExif就能准确地再现给 查看者。

什么是IPTC/NAA?

  IPTC-NAA由美国报业协会(NAA)和国际印刷电信委员会(IPTC)制定的信息标准,以识别传输的文本和图像。该标准包括关于题注、关键字、类别、资料来源和原稿的条目等。当前许多新闻图片机器都包含了IPTC/NAA记录。

原文地址:http://hi.baidu.com/moneyin/blog/item/2f6617c4bd392bcc39db4990.html

给JPEG添加Exif图片说明信息的简单方法相关推荐

  1. wordpress添加媒体_4种将音频添加到WordPress网站的简单方法

    wordpress添加媒体 This article is part of a series created in partnership with SiteGround. Thank you for ...

  2. JPEG图像EXIF数据信息的解析

    刚刚结束本科生活的我,那会还比较颓废,但是因为读研,导致宝宝七月初就到了学校,来了以后也不知道该做什么,就出去浪呀~哈哈,不料来了不久后接到老师的任务,让宝宝把JPEG图像的EXIF信息解读出来,当时 ...

  3. 一种获取过程调用堆栈信息的简单方法

    在程序崩溃或出现异常时,通常需要给开发人员提供基本的过程调用的信息,这里给出一个简单的C++实现.主要思路是:过程调用的开始时,在栈上创建一个类,利用类的构造函数记录相关信息,在过程调用完毕时会自动调 ...

  4. Win7 添加grub引导Linux最简单方法

    http://www.cnblogs.com/kidfruit/archive/2010/09/01/1814993.html 因为Win7(Vista同理)的激活方式是通过grub摸你OEM的Sli ...

  5. Win7激活后添加grub引导Linux最简单方法

    因为Win7(Vista同理)的激活方式是通过grub摸你OEM的Slic信息,所以主引导分区MBR被这个grub占用,以此才能激活WIn7.但是如果想同时安装Linux在别的分区,就会产生问题:gr ...

  6. 在 PDF 中添加文本的 3 种简单方法

    我们更喜欢将我们的文件保存为 PDF 并打印它,这样打印的文件将保持原始的完美结构.你不得不承认,有时候,当你打印一个 Word 文件时,它可能会打印出乱七八糟的排版,这对进一步的工作来说是令人沮丧的 ...

  7. win10计算机信息更改图,win10修改版本信息的简单方法【图文教程】

    在某些特殊情况下,我们需要修改win10系统的版本信息,一般系统版本信息是本身就设置好的,能不能随意修改?大部分用户心理都没底,其实Win10系统版本号是可以任意修改,知识要掌握对的方法,如果你有需要 ...

  8. 用python获取usb设备端口号,用Python查询连接的USB设备信息的简单方法?

    如何在Python中查询连接的USB设备信息? 我想得到UID设备名(例如:SonyEricsson W660),设备路径(例如:dev/ttyACM0) 此外,上述信息中的最佳参数是什么,以便在设备 ...

  9. Win11在桌面添加透明便签的简单方法

    现在有的人将自己的电脑升级到了win11系统,有时会在电脑中使用到便签,便签类似于备忘录,可以帮助到我们记录提醒很多事情,很多人都会将便签放到桌面上,但是桌面上多出便签影响美观,那么怎么将便签设置为透 ...

最新文章

  1. php操作mysql数据库,PHP操作mysql数据库
  2. 微信小程序转百度小程序修改
  3. oh-my-zsh 功能收集
  4. 百思不得姐第4天:文本框占位文字颜色
  5. 如何卸载mysql重新安装win10_学以致用二十八-----win10安装mysql5.7.24及卸载
  6. Linux-Ubuntu 启用root账户
  7. cvpr2020 人脸检测与识别_投石科技温度检测人脸识别设备装置
  8. hashmap put过程_看完还不懂HashMap算我输(附互联网大厂面试常见问题)
  9. 堆排序可运行完整C语言,Java语言,python实现
  10. 让你更中立!腾讯微信进行灰度测试 “好看”变为“在看”
  11. 获取Android Studio的Sha1
  12. vue 地图使用navigator_初识ABP vNext(6):vue+ABP实现国际化
  13. 电与磁 —— 电磁铁
  14. goaccess分析nginx日志
  15. hive select 语句
  16. Sumatra PDF——好用快捷工具介绍及使用
  17. java什么是继承_JAVA中什么是继承?
  18. 类和对象的定义和关系
  19. 防电脑辐射的方法,电脑防辐射技巧
  20. 2021年吉林艺术高考成绩查询,2021年吉林艺术学院高考录取结果什么时候出来及查询系统入口...

热门文章

  1. 私域社群运营—朋友圈运营策略
  2. http拨测是什么意思_快速构建拨测系统
  3. 合工大计算机仿真实验,哈工大计算机仿真
  4. linux kbengine 环境,KBEngine服务器环境搭建
  5. 北戴河2日游之图解版(5.3--5.4) 每日一图
  6. android webview虚拟现实,WebVR in WebView
  7. python之字典dict:明明有key,但是却报错KeyError
  8. SVN---搭建幸福之家
  9. 【Python3】初识Python及其基础知识
  10. GEE中遥感影像反演水深遇到的一些问题