如果你拥有数码相机,你就可能拥有一些难忘时刻的数码相片集。如果你有数码相片集,你定会遇到一个十分普遍的问题:如何组织它们以方便进行搜寻与索引。
现在,你可能不知道这一点,但其实大多数的数码相机都自动地在所拍摄相片的标题中插入描述性的数据元。这些称为“可交换图象文件”(EXIF)的标题中包含有关于相机的制造厂家与型号、相片拍摄的日期与时间、相片的技术规范(快门速度、光圈等)以及相片的缩略图等信息。另外,许多图象编辑软件允许你用自己描述性的文本来补充这些自动生成的标题,如:“萨利的第一场足球赛”,或是“马尔他醉酒记事”。
我相信你能明白我说这些是什么意思。用一点想像及创造性思维,你就能用你相机生成的标题(及你花时间与精力对它们所作的补充)来自动地组织及描述你的相片集。这篇文章将教你如何用PHP的EXIF功能做到这一点。
第一步:确保你的PHP支持EXIF。
你的PHP必须支持EXIF才能阅读EXIF标题。你可以通过创建包含如下表A所示的PHP脚本代码来检证它。
表 A
〈?php
phpinfo();
?〉
查看这一脚本在你的网络浏览器上的输出结果,并检查扩展名列表看其中是否包含有EXIF字样。如果已包含EXIF字样,则进入下一步;如果没有,你就需要激活PHP的EXIF功能:在WINDOWS中,你可以注释php.ini文件的扩展名;在UNIX中,你可以用enable-exif命令来重新汇编PHP build。欲了解更多相关信息请访问PHP网站。
第二步:将你的相片移到一个单独的目录。
下一步,将你所有的相片集中到网络服务器根目录下的一个单独目录中。同时这也是你给相片加上你自己的描述性注释的适当时机(尽管这并非必要)。许多优秀的共享软件和免费软件都可以帮你做到这一点。如在Windows运行的Exifer和RoboPhoto。
第三步:编写阅读相片标题及注释的代码。
最后一步是编写PHP脚本,以从相片中提取EXIF数据,并自动生成含有略图、技术信息和每幅图片的大图链接的网页。这里有两段脚本,第一段为 gallery.php(见表B),用来寻找相片并从中提取EXIF标题;第二段为thumbnail.php(见表C),负责从每幅相片中提取略图。
表 B
〈html〉
〈head〉〈/head〉
〈body〉
〈table〉
〈?php
// define directory path
$dir = ".";
// iterate through files
// look for JPEGs
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (preg_match("/.jpg/", $file)) {
// read EXIF headers
$exif = exif_read_data($file, 0, true);
echo "〈tr〉";
// get thumbnail
// link to full image
echo "〈td valign=top〉〈a href=$dir/$file〉〈imgsrc=thumbnail.php?file=$file〉〈/a〉〈td〉";
echo "〈td valign=top〉〈font size=-1〉";
// get file name
echo "File: 〈b〉" . $exif['FILE']['FileName'] . "〈/b〉〈br/〉";
// get timestamp
echo "Timestamp: " . $exif['IFD0']['DateTime'] . "〈br/〉";
// get image dimensions
echo "Dimensions: " . $exif['COMPUTED']['Height'] . " x " . $exif['COMPUTED']['Height'] . " 〈br/〉";
// get camera make and model
echo "Camera: " . $exif['IFD0']['Model'];
echo "〈/font〉〈/td〉";
echo "〈/tr〉";
}
}
closedir($dh);
}
}
?〉
〈/table〉
〈/body〉
〈/html〉
