伪造图像的exif信息

前两天在Gfans里面聊天的时候,聊到flickr不鼓励用户上传非数码照片的图像,而像我这样喜欢用flickr保存截图并在blog中引用的人应该不在少数,所以就谈到可以写个小程序把屏幕截图“伪装”成数码照片,当然你如果真的愿意拿数码相机对着屏幕拍照也没人拦着 :)。

不过互联网上相关的资料还是比较少,搜索了半天找到一个比较类似的,结果研究了半天才发现人家并不是在修改exif信息,而是把exif信息读出来,做成水印再贴到图像上。然后又用setexif和writeexif、copyexif作为关键字来搜索,终于找到了一个现成的程序,再进一步发掘,这个copyexif程序已经被作者推荐使用jhead替代了,而这个jhead居然在ubuntu源中也有,嘿嘿:

sudo apt-get install jhead

这个jhead的功能还是非常强大与方便的,不过我们只需要其中一点点:

jhead -te $FROM $TO

其中$FROM是一张正常的数码照片,$TO就是屏幕截图了,这个命令就可以把正常数码照片的exif header拷贝到屏幕截图中,如果传到flickr上,他就会认为是一幅数码照片而不会被当作是屏幕截图了。注意两个图片都必须是jpeg格式。

不过这种方法也有缺点,首先是exif和图像肯定对不上,我曾尝试用exif命令来手工设置正确的图像信息到exif header,不过很多部分写入时都会提示“Not yet implemented!”不支持;其次是图像尺寸会扩大很多,一般屏幕截图使用png格式是最节约空间的,但转换为jpg之后就大了很多,比如我一张3.5k大小326×225的png截图,转换为jpg格式、再添加上exif信息、再去掉exif中的thumbnails之后,还有43.8k,不过我们的图片是放在flickr,空间的问题可以不用考虑太多了。

还有一些其他的软件,比如jpegtran中的wrjpgcom / rdjpgcom,但他们都比较简单了,只能对comment部分进行操作,远不如jhead方便,如果jhead能夠方便的设置每一项exif信息就更好了。

好了,现在看看我“拍摄”的照片如何: 使用jhead拷贝图像的exif信息 注意它是带有拍摄相机、光圈、快门速度等exif信息的哦。

jhead还有一个非常好用的地方,就是当你要使用其他图像处理软件处理一批数码照片的时候,为了防止图像处理软件破坏掉exif信息,可以先把所有照片都拷贝一份到originals子目录,处理完成后再用命令

jhead -te originals/&i *.jpg

就可以恢复所有文件的exif信息了,不用担心,jhead会自动匹配命令中的文件名,更详细的说明可以看jhead的文档或man jhead。

Leave a Reply

Your email address will not be published. Required fields are marked *