灵感的来临,没有任何预兆;灵感的消失,也不会有告别仪式;用文字记下她们吧,让灵感永存……

批量处理数码照片相关

davies 发表于 2007 年 04 月 22 日

两周前写了关于批量更新数码照片时间的文章,使用的是 Perl 实现的 ExifTool,非常强大,除了速度有点慢以外。前两天发现了一个更针对常用的处理数码照片操作的更好的工具JHead,它是用C实现的,速度更快。作者是根据处理的照片的实际需求而作,非常贴合实际,目前的最新版已经到2.7,比较成熟和稳定,在Gentoo中可以直接安装:emerge jhead。

具体的使用方法请看官方文档,下面简单列举几个我用到的功能:

自动旋转照片:jhead -autorot photo.jpg
它会根据某些数码相机记录下的拍摄信息自动旋转照片,并适当处理相关EXIF信息,包括缩略图。在要批量自动旋转大量照片是用它的通配符展开还是觉得不太爽,可以结合find来处理,比如把当前目录下的所有照片都自动旋转可以这样:
find . -type f -exec jhead -autorot '{}' \;
Windows自带的图片和传真查看器居然不会处理EXIF,令人发指,建议不要使用它来旋转照片。对于那些不包含旋转信息的照片,用 Picasa 来处理还是很不错的,会将缩略图跟照片同步起来。只是它总是要备份照片到名为"Orinigals"的子目录中,没得选择。可以用下面的命令一次性删除:
find .-type d -name Originals -exec rm -rf '{}' \;

导出照片中的缩略图:jhead -st thumbnail.jpg photo.jpg
网站上为了浏览图片时更迅速,需要生成缩略图。使用GD或者ImageMagick等工具来处理时,需要解压缩图片再进行放缩,还是比较慢的。而从数码照片直接提取已经生成好的缩略图时,速度要快上一个数量级,所消耗内存也非常小,在需要实时生成缩略图的应用非常有用,比如第一次浏览基于目录的相册Singapore时。但是这种方式也是有代价的,因为照片中的缩略图是事先生成的,尺寸未知,很可能跟实际用来显示的大小不一致,这样浏览器再重新进行大小调整时会时画质下降很多,影响浏览时的视觉效果。缩略图的作用也就是让用户大概知道是什么内容,这方面的要求还是可以基本满足的。

另外,再用ImageMagick的convert来生成缩略图时,建议采用-sample参数而不是-resize或者-geometry,前者会比后者快三倍。比如:
# time convert P4175994.JPG -resize 100x100 1.jpg
real    0m2.268s
user    0m2.114s
sys     0m0.122s
# time convert P4175994.JPG -sample 100x100 1.jpg
real    0m0.881s
user    0m0.772s
sys     0m0.108s

处理数码照片的拍摄时间方面,更是方便,可以直接相对调整照片的牌是时间,根据拍摄时间调整文件的修改时间(便于做排序),可以根据拍摄时间来格式化文件名等,非常贴心。

此外,还能操作JPG文件中的评论文字,根据文件比例选择文件,比如选择所有竖型照片。看看它的参数说明文档就非常清除了。

网友留言:

我来留言