当我使用exif_read_data()从原始文件中读取EXIF数据时,很多数据都会被破坏。或者我认为。
我试图阅读的文件是Pentax K-x相机的DNG Raw文件。
这是一个演示:http://server.patrikelfstrom.se/exif/?file=_IGP6211.DNG
(我已经从佳能EOS 1000D添加了标准JPEG作为比较)
我在这个网站上没有错误,它似乎包含exif_read_data()没有返回的数据。 http://regex.info/exif.cgi
我所谈论的腐败数据是:...”¯/ѳf/ÇZ/íÔ.ƒ.9:./<ñ.TÛ¨.zâh!o†!™˜...
并且:UndefinedTag:0xC65A
服务器正在运行PHP 5.5.3版
答案 0 :(得分:2)
仅仅因为数据不是人类可读并不意味着垃圾。
您看到的那些值是私有EXIF字段,由实施者决定。它们可以是二进制数据,它们可以是文本,它们可以是任何东西。 This listing可以帮助您确定其中的一些值。
例如,标记0xC634是DNGPrivateData,它是专门用于处理DNG文件的程序的数据。
答案 1 :(得分:1)
您可以将未定义的标签映射到他们最有可能使用此文件的位置:
https://github.com/peterhudec/image-metadata-cruncher/blob/master/includes/exif-mapping.php
看起来您的脚本在0xc634 => 'SR2Private'
看这里http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Pentax.html看起来它用于存储相机上闪光灯的信息?我不确定,但它可能不是重要信息,可能不是以文本格式查看。
我可能只是列出它似乎死掉的键,循环遍历exif数据,查看它是否以undefinedkey:
开头并将键重命名为映射的键,或者取消设置这些项:
$bad_keys = array('0xc634', ..., '0xc723');
foreach ( $exif as $key => $value ) {
if ( strtolower( substr( $key, 0, 13 ) ) == 'undefinedtag:' ) {
//use the file with the map of undefined tags
//either change the key, or unset it if it's one
//that seems to be corrupt
}
}