Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。
本文是使用WordPress附件函数wp_get_attachment_metadata来获取照片的EXIF信息,通过附件的ID来读取EXIF信息,所以要获取照片的EXIF信息,是必须把照片上传到媒体中,将EXIF信息存储在数据库中,这样函数才能读取。在导出照片时需要注意,很多软件默认会清除一些EXIF信息,选择保留所有EXIF信息(元数据)。
国内暂时没有看到其它主题有获取照片EXIF信息功能,国外也很罕见,有也是通过Exifography插件来实现,但获取的EXIF信息并不全,很多也获取不了,因为Exifography插件就是通过wp_get_attachment_metadata来获取,所以下面的代码也同样是获取不全照片的EXIF。
以下代码添加到functions.php文件中(添加曝光补偿单位与转换快门时间代码来源Exifography插件),在编辑文章时使用简码:[exif id=""],来获取照片的EXIF信息(一个简码只能添加一个照片ID):
//获取媒体图片EXIF信息
function sl_exif($atts, $content = null) {
extract(shortcode_atts(array(
"id" => ''
), $atts));
$imgmeta = wp_get_attachment_metadata($id);
//添加曝光补偿单位
$exposure_bias_parts = explode("/", $imgmeta['image_meta']['exposure_bias']);
if ($exposure_bias_parts[0] == "0")
$exif = '';
else {
$float = intval($exposure_bias_parts[0]) / intval($exposure_bias_parts[1]);
if (is_int($float))
$exif = sprintf("%+d%s", $float, __('EV','exifography'));
elseif ($float <= -1 || $float >= 1)
$exif = sprintf("%+.1f%s", $float, __('EV','exifography'));
else
$exif = sprintf("%+d%s%d%s", intval($exposure_bias_parts[0]), "/", intval($exposure_bias_parts[1]), __('EV','exifography'));
}
//转换快门时间
if (isset($imgmeta['image_meta']['shutter_speed'])) {
if ((1 / $imgmeta['image_meta']['shutter_speed']) > 1) {
$speed = "1/";
if ((number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1)) == 1.3
or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.5
or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 1.6
or number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1) == 2.5) {
$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 1, '.', '') . "s";
}
else
$speed .= number_format((1 / $imgmeta['image_meta']['shutter_speed']), 0, '.', '') . "s";
}
else
$speed = $imgmeta['image_meta']['shutter_speed']."s";
}
$shortcode.= '<ul>';
$shortcode.= '<li class="image-meta"><span>'.__( '型号:', 'salong' ).'</span>'.$imgmeta['image_meta']['camera'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '镜头:', 'salong' ).'</span>'.$imgmeta['image_meta']['lens'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '光圈:', 'salong' ).'</span>f/'.$imgmeta['image_meta']['aperture'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '快门:', 'salong' ).'</span>'.$speed.'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '焦距:', 'salong' ).'</span>'.$imgmeta['image_meta']['focal_length'].'mm</li>';
$shortcode.= '<li class="image-meta"><span>'.__( 'ISO:', 'salong' ).'</span>'.$imgmeta['image_meta']['iso'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '曝光补偿:', 'salong' ).'</span>'.$exif.'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '曝光程序:', 'salong' ).'</span>'.$imgmeta['image_meta']['exposure_program'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '白平衡:', 'salong' ).'</span>'.$imgmeta['image_meta']['white_balance'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '闪光灯:', 'salong' ).'</span>'.$imgmeta['image_meta']['flash'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '分辨率:', 'salong' ).'</span>'.$imgmeta['image_meta']['resolutionUnit'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '软件:', 'salong' ).'</span>'.$imgmeta['image_meta']['software'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '尺寸:', 'salong' ).'</span>'.$imgmeta['width'].'*'.$imgmeta['height'].'px</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '位置:', 'salong' ).'</span>'.$imgmeta['image_meta']['location'].'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '时间:', 'salong' ).'</span>'.date_i18n('Y-m-j G:i:s a',$imgmeta['image_meta']['created_timestamp']).'</li>';
$shortcode.= '<li class="image-meta"><span>'.__( '版权:', 'salong' ).'</span>'.$imgmeta['image_meta']['credit'].'</li>';
$shortcode.= '</ul> ';
return $shortcode;
}
add_shortcode("exif", "sl_exif");
//简码:[exif id=""]

