照片exif信息处理工具jhead


jhead //www.sentex.net/~mwandel/jhead/
jhead是一个处理照片exif信息的命令行工具
批处理能力强大
使用方法 jhead 参数列表 jpg文件列表
jhead -se 1 jpg   处理单个文件
jhead -se 2009_[0-9] jpg 处理指定的多个文件
jhead -se * jpg 处理所有文件
用**通配符来代替子目录 对指定目录的遍历 包括子目录的子目录
jhead -se c:/tmp* jpg
参数联合使用 jhead -se -q 1 jpg 2 jpg 3 jpg

显示jhead版本 获得帮助
-V(大写的V) 显示jhead的版本
-h 获得帮助

由于jhead的帮助较长 管道输出适合阅读 jhead -h | more
旋转照片
-autorot 根据exif中记录的水平方向信息转动照片
-norot    清除exif中记录的水平方向信息
jhead 照片旋转是据于照片的exif旋转标志进行的 通常是前期竖拍的照片 横拍的照片它会自动跳过不予处理
同时自动清除旋转标志 并不需要再做一次norot操作
处理过的照片会跟横拍一样 在windowsXP及以更老的系统里 得到正常浏览
jhead对照片的旋转是无损的
jhead 支持通配符处理模式 从而实现批处理 所以很多时候对单张照片进行旋转是没有意义的
处理效率不是光影等其他第三方软件所能比拟的
不过 这一功能在windows7里已经得到了实现 用windows7系统自带的照片导入功能 会实现对前期竖拍照片的自动旋转 功能一样
实例
当前目录下的所有jpg文件进行转动 jhead -autorot * jpg
显示照片的exif信息
-v(小写的v) 详细的exif信息显示
-exifmap    显示头信息 总之跟v不一样
-se 简化显示
-c   精简显示(比-se更简单)
有时候可能需要把照片的exif信息转入文体保存 可以直接重定向输出就可以了
jhead -se ld_pic jpg>a txt
处理exif信息一
-dc   删除jpg信息中的备注
-de  完全删除exif信息
-du  删除非原始exif信息 例如Photoshop之类编辑后修改exif留下的信息
-purejpg  删除所有jpg文件非必须信息  相当于-de -dc -du的集合 文件将减小数k
-mkexif   创建新的最小exif信息(覆盖原有的的exif信息) 不明白这有什么用
-di   删除IPTC (Photoshop 格式兼容) 信息
-dx  删除XMP (photoshop文件信息)
参数很简单
但-du和-mkexif有时并不管用
清除当前目录下所有jpg文件的exif信息    
jhead -purejpg * jpg
处理exif信息二
-te    从其他jpg文件导入exif信息到当前文件
你可以单个文件导入
如:jhead -te 01 jpg 02 jpg 把01 jpg的信息导入到02 jpg 覆盖原来的
也可以批量导入
如:jhead -te "bak/&i" * jpg 把bak目录下的jpg文件信息按文件名一一对应的导入当前目录下的jpg文件!引号不省略!!
据说之一功能最常用的是在照片PS完后 再导入原生信息
处理exif信息三
-dc 删除jpg信息中的备注
-ce   使用系统默认编辑器编辑备注 运行时会自动打开文本编辑器 录完信息 保存并关闭后 信息会自动被写入备注
-cs 导出备注到文本文件  如:jhead -cs 1 txt 1 jpg
-ci  从文体文件导入备注 如: jhead -ci 1 txt 1 jpg
-cl string 直接输入备注 如: jhead –cl 我爱无常版主 1 jpg
exif中的备注不同于windows给文件所做的备注
一般的软件会看不到 包括光影 但还是不少软件能阅读 如Exifer
缩略图
-dt   删除exif中的缩略图  此缩略图一般240x160象素 10k大小
-st [name]   将exif中的缩略图复制为另一个jpg文件
-rt [name]  用另一个jpg文件替换exif中的缩略图
-rgt[size]  刷新exif缩略图 其中[size]为缩略图的最大边长
-rgt功能的实现是调用第三方应用程序mogrify exe 所以你之前必须下载并安装之一程序!在jhead官方网站有链接
但这一功能好像不是对所有的jpg文件都管用 找不出原因
jhead -st "bak/&i" * jpg
把当前目录下的所有文件的缩略图复制保存到bak目录下并与原文件名同名
修改时间与文件改名
-ft   将jpg文件的“修改时间”修改为exif信息中记录的拍摄时间
-dsft    把照片exif信息时间设置为文件修改时间
-da[date1]-[date2] 把拍摄日期为data2的照片日期修正为data1;date格式为yyyy:mm:dd或yyyy:mm:dd+hh:mm或yyyy:mm:dd+hh:mm:ss
-ts[time]    直接修改exif中的时间 格式为yyyy:mm:dd-hh:mm:ss
-ds[date]    直接修改exif中的日期 格式为yyyy:mm:dd 或yyyy:mm 或yyyy
-ta[+|-]h[:mm[:ss]] 修正时差 根据时区确定 例如+1:00或者-1:00
-n[format-string]    将照片文件名修改为exif信息中记录的“数字化时间” 保留原文件名; 如果exif数字化时间不可用 则将文件名修改为文件的“修改时间”
-nf [format-string]   与"-n"相同功能相同 不保留原文件名
format-string格式说明
%d  日    (01-31)
%H 小时 (00-23)
%j 一年中的第几天     (001-366)
%m   月    (01-12)
%M 分钟 (00-59)
%S 秒    (00-59)
%U   一年中的第几周 (00-53)
%w   星期几   (0-6 周日为0)
%y  两位数纪年   (00-99)
%Y 四位数纪年
%i  添加数字序号 也可以指定位数 如:%04i(生成4位序号 不足的高位补零)
%f  原文件名
照片中exif信息记录的时间有三个分别是
拍摄时间 数字化时间(也有叫创建时间的)
和修改时间这些时间记录与windows中有关文件时间是不一样的 两码事!
jhead对照片日期的修改是同步修改这三个时间!!!
jhead -da2009:01:01-2008:01:01 * jpg
把当前目录下的所有拍摄日期为2008/01/01的照片更改时间为2009/01/01 这在相机日期设置有误时非常有用
jhead -ds2009 * jpg
把当前目录下的所有jpg文件的日期年份更改为2009年 保持日期的其他部分(月 日及时间)不变!
jhead -nf%Y_%m%d_%04i * jpg
把当前目录下的所有jpg文件的文件名更改为
年4位_月2位日2位_4位序号 jpg 如:2009_1201_0001 jpg
-q  不显示程序运行信息 和其他参数一起使用 这在编写批处理脚本时非常有用
-cmd command  调用其他程序 如:jhead -cmd "mogrify -quality 80 &i" * jpg
-exonly   不处理没有exif信息的文件 要和其他参数一起使用
-a  修改不同扩展名的同名文件名 拍摄的avi短片exif信息存储在同名thm文件中 可用此指令给avi文件更名  一般与-n共同使用