PHP-GD用于图像处理,结合getimagesize()获取尺寸与类型,exif_read_data()读取EXIF信息如相机型号、拍摄时间,iptcparse()解析IPTC版权与标题数据,需启用exif扩展,注意部分图片可能缺失元数据。

PHP-GD 扩展本身主要用于图像的创建和处理,比如缩放、裁剪、加水印等。但它对读取图像的元数据(如 EXIF、IPTC、XMP 等)支持有限。不过,你可以结合 PHP 内置函数和 GD 配合使用来获取基本图像信息和部分元数据。
1. 使用 getimagesize() 获取基本图像信息
getimagesize() 是 PHP 的标准函数,不需要 GD 扩展也能运行,但常与 GD 配合使用。它可以获取图像的尺寸、类型、MIME 类型以及部分嵌入信息。
$filename = 'example.jpg';
$info = getimagesize($filename);
if ($info) {
echo "宽度: " . $info[0] . "px
";
echo "高度: " . $info[1] . "px
";
echo "类型: " . $info[2] . " (" . image_type_to_extension($info[2]) . ")
";
echo "MIME: " . $info['mime'] . "
";
// 如果有附加参数(如 IPTC)
if (isset($info['APP13'])) {
$iptc = iptcparse($info['APP13']);
print_r($iptc);
}
}
2. 读取 EXIF 元数据(需 exif 扩展)
GD 不提供 EXIF 读取功能,但 PHP 提供了 exif_read_data() 函数,可读取 JPEG 和 TIFF 图像中的相机信息、拍摄时间、GPS 等。
$exif = exif_read_data('example.jpg');
if ($exif !== false) {
foreach ($exif as $key => $value) {
echo "$key: $value
";
}
}
// 常见字段
echo "相机型号: " . ($exif['Model'] ?? '未知') . "
";
echo "拍摄时间: " . ($exif['DateTime'] ?? '未知') . "
";
echo "光圈: f/" . ($exif['FNumber'] ?? '未知') . "
";
echo "焦距: " . ($exif['FocalLength'] ?? '未知') . "mm
";
3. 读取 IPTC 信息(如版权、标题等)
IPTC 通常用于新闻图片,包含标题、作者、版权等信息。可以使用 getimagesize() 搭配 iptcparse() 解析。
立即学习“PHP免费学习笔记(深入)”;
$size = getimagesize('example.jpg', $info);
if (isset($info['APP13'])) {
$iptc = iptcparse($info['APP13']);
if ($iptc) {
echo "标题: " . ($iptc['2#005'][0] ?? '无') . "
";
echo "作者: " . ($iptc['2#080'][0] ?? '无') . "
";
echo "版权: " . ($iptc['2#116'][0] ?? '无') . "
";
echo "关键词: " . implode(', ', $iptc['2#025'] ?? []) . "
";
}
}
4. 注意事项
确保你的 PHP 环境已启用相关扩展:
- GD 扩展:用于图像处理
- EXIF 扩展:用于读取相机元数据(php.ini 中开启 extension=exif)
- IPTC 支持:默认一般可用
不是所有图像都包含完整元数据,特别是经过压缩或网页优化的图片,可能已被剥离 EXIF/IPTC 信息。
基本上就这些。getimagesize() 能拿基础信息,exif_read_data() 拿相机数据,iptcparse() 处理图文信息。GD 本身不负责元数据,但这些函数常和 GD 流程一起用。











