[![wordpress附件函数wp_get_attachment_metadata简码获取照片EXIF信息](https://pic.salongweb.com/2015/10/function_exif.jpg)](https://pic.salongweb.com/2015/10/function_exif.jpg "wordpress附件函数wp_get_attachment_metadata简码获取照片EXIF信息")
自动获取照片的EXIF信息，很多大型的摄影论坛都有这个功能，对于摄影爱好者来说是一个很实用的功能。萨龙龙开发的[Deephoto主题](https://deephoto.salongweb.com)和[Neatimg主题](https://salonglong.com)中就添加了些功能，通过简码很方便的获取了照片的EXIF信息。

\[infobox\]首先我们了解下什么是EXIF：\[/infobox\]Exif是一种图像文件格式，它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息，包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片，但并不是所有的图形程序都能处理Exif信息。
\[successbox\]Wordpress附件函数wp\_get\_attachment\_metadata\[/successbox\]本文是使用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）：

1. //获取媒体图片EXIF信息
2. function sl\_exif($atts, $content = null) {
3. extract(shortcode\_atts(array(
4. “id” =&gt; ”
5. ), $atts));
6. $imgmeta = wp\_get\_attachment\_metadata($id);
7. //添加曝光补偿单位
8. $exposure\_bias\_parts = explode(“/”, $imgmeta\[‘image\_meta’\]\[‘exposure\_bias’\]);
9. if ($exposure\_bias\_parts\[0\] == “0”)
10. $exif = ”;
11. else {
12. $float = intval($exposure\_bias\_parts\[0\]) / intval($exposure\_bias\_parts\[1\]);
13. if (is\_int($float))
14. $exif = sprintf(“%+d%s”, $float, \_\_(‘EV’,’exifography’));
15. elseif ($float &lt;= -1 || $float &gt;= 1)
16. $exif = sprintf(“%+.1f%s”, $float, \_\_(‘EV’,’exifography’));
17. else
18. $exif = sprintf(“%+d%s%d%s”, intval($exposure\_bias\_parts\[0\]), “/”, intval($exposure\_bias\_parts\[1\]), \_\_(‘EV’,’exifography’));
19. }
20. //转换快门时间
21. if (isset($imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\])) {
22. if ((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]) &gt; 1) {
23. $speed = “1/”;
24. if ((number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 1)) == 1.3
25. or number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 1) == 1.5
26. or number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 1) == 1.6
27. or number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 1) == 2.5) {
28. $speed .= number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 1, ‘.’, ”) . “s”;
29. }
30. else
31. $speed .= number\_format((1 / $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\]), 0, ‘.’, ”) . “s”;
32. }
33. else
34. $speed = $imgmeta\[‘image\_meta’\]\[‘shutter\_speed’\].“s”;
35. }
36. $shortcode.= ‘&lt;ul&gt;’;
37. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘型号：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘camera’\].'&lt;/li&gt;’;
38. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘镜头：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘lens’\].'&lt;/li&gt;’;
39. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘光圈：’, ‘salong’ ).'&lt;/span&gt;f/’.$imgmeta\[‘image\_meta’\]\[‘aperture’\].'&lt;/li&gt;’;
40. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘快门：’, ‘salong’ ).'&lt;/span&gt;’.$speed.'&lt;/li&gt;’;
41. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘焦距：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘focal\_length’\].’mm&lt;/li&gt;’;
42. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘ISO：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘iso’\].'&lt;/li&gt;’;
43. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘曝光补偿：’, ‘salong’ ).'&lt;/span&gt;’.$exif.'&lt;/li&gt;’;
44. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘曝光程序：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘exposure\_program’\].'&lt;/li&gt;’;
45. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘白平衡：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘white\_balance’\].'&lt;/li&gt;’;
46. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘闪光灯：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘flash’\].'&lt;/li&gt;’;
47. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘分辨率：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘resolutionUnit’\].'&lt;/li&gt;’;
48. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘软件：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘software’\].'&lt;/li&gt;’;
49. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘尺寸：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘width’\].’\*’.$imgmeta\[‘height’\].’px&lt;/li&gt;’;
50. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘位置：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘location’\].'&lt;/li&gt;’;
51. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘时间：’, ‘salong’ ).'&lt;/span&gt;’.date\_i18n(‘Y-m-j G:i:s a’,$imgmeta\[‘image\_meta’\]\[‘created\_timestamp’\]).'&lt;/li&gt;’;
52. $shortcode.= ‘&lt;li class=“image-meta”&gt;&lt;span&gt;’.\_\_( ‘版权：’, ‘salong’ ).'&lt;/span&gt;’.$imgmeta\[‘image\_meta’\]\[‘credit’\].'&lt;/li&gt;’;
53. $shortcode.= ‘&lt;/ul&gt; ‘;
54. return $shortcode;
55. }
56. add\_shortcode(“exif”, “sl\_exif”);
57. 
58. //简码：\[exif id=””\]

\[successbox\]这次只是介绍通过Wordpress附件函数来获取照片的EXIF信息（虽然不全），之后再写一些通过PHP函数获取所有EXIF信息的文章。\[/successbox\]