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=""]