Php 如何向图像添加元数据?

Php 如何向图像添加元数据?,php,image,metadata,Php,Image,Metadata,在何处向和图像文件中插入元数据,以及这样做的标记是什么?我想用php实现这一点。我最近在w3c博客上看到了一篇非常酷的文章,内容是结合RDFa和HTML来丰富图像,不仅指定图像中的内容,还指定图像中的位置:将php集成到图像中;) JPEG、TIFF、PSD、Raw和其他几种文件格式可以包含以下任何或所有标准类型的元数据: IPTC-IIM 这种模式通常被称为“传统”IPTC,它是在20世纪90年代初开发的,主要用于帮助新闻机构为早期数字图像添加字幕。它的主要优点是,大多数图像编辑和管理程序可

在何处向和图像文件中插入元数据,以及这样做的标记是什么?我想用php实现这一点。

我最近在w3c博客上看到了一篇非常酷的文章,内容是结合RDFa和HTML
来丰富图像,不仅指定图像中的内容,还指定图像中的位置:

将php集成到图像中;)

JPEG、TIFF、PSD、Raw和其他几种文件格式可以包含以下任何或所有标准类型的元数据:

IPTC-IIM 这种模式通常被称为“传统”IPTC,它是在20世纪90年代初开发的,主要用于帮助新闻机构为早期数字图像添加字幕。它的主要优点是,大多数图像编辑和管理程序可以读取和写入其广泛兼容的字段

IPTC核心与扩展 这一较新的模式建立在IIM遗产的基础上,通过添加更多类型的描述性和管理信息,包括新字段,以适应库存摄影和文化遗产社区的需求,并以更强大的数据格式“XMP”打包

加上 用于识别和定义图像使用许可证的图片授权通用系统描述了用于生成字符串的模式和工具,该字符串可以识别版权所有者、用户、许可图像使用的范围和条款

XMP 这是IPTC核心和扩展用于存储和访问图像元数据的较新数据格式。它支持在图像文件或附带的侧车文件中存储元数据,并允许创建自定义元数据字段

进出口银行 这些元数据通常由相机和其他捕获设备创建,包括有关图像及其捕获方法的技术信息,例如曝光设置、捕获时间、GPS位置信息和相机模型

都柏林核心
许多图像库和各种各样的行业都使用此模式使用图像文件存储信息。它的几个字段可与IPTC格式互操作。

在PHP中,您可以使用标题:

例如:

 header('Content-Length: ' . filesize($file));  /// that's the file size 

您可以添加更多类似于该标题的标题,它会起作用。您甚至可以发送一些自定义标题,但它仍会起作用:)

您可以使用像imagemagick这样的图像库

我知道还有另一个名为Jhead的工具,它可以在需要图像时重定时和修改一些元数据


您可以使用PHP中的iptcembed函数向图像添加信息。 有关使用情况,请访问:

可以使用iptcparse函数检索添加的数据


让我知道这是否适合您。

您可以选择一个更简单的替代方案,即使用
exiftool
命令行工具

为了使用它,我今天为一个个人项目编写了一个简单的PHP脚本,如果您在PHP变量中已经有纬度/经度信息,它将编写纬度/经度信息

这是一种非常重要的方法,可以在前面的基础上添加gpsLatituteRef和GPSLongitudeRef值。基本上,如果纬度为正,则GPSLatitudeRef应具有“北”值,如果为负,则应具有“南”值。对于GPSLongitudeRef来说是一样的,但当为正时为“东”,当为负时为“西”

$bashExifEdit = "";
$longitudeRef = "East";
if ($longitude < 0) {
    $longitudeRef = "West";
}
$latitudeRef = "North";
if ($latitude < 0) {
    $latitudeRef = "South";
}

if ($sleepingPlace != null) {
    $bashExifEdit .= "exiftool -GPSLongitude=\"".$longitude."\"  -GPSLatitude=\"".$latitude.".\" -GPSLatitudeRef=\"$latitudeRef\" -GPSLongitudeRef=\"$longitudeRef\"  images/your_image.jpg\n";
}
$bashExifEdit=”“;
$longitudeRef=“东”;
如果($经度<0){
$longitudeRef=“西”;
}
$latitudeRef=“北”;
如果($纬度<0){
$latitudeRef=“南”;
}
if($sleepingPlace!=null){
$bashExifEdit.=“exiftool-gpsLangitude=\.”.$longitude.\'-gpsLatitutede=\.”.$latitudeRef.\'-gpsLatituteRef=\“$latitudeRef\”-gpsLangitudeRef=\“$longitudeRef\”图像/your\u image.jpg\n”;
}

这将为每个图像生成一个字符串,其中包含和结束行字符。如果您添加了for,那么您只需将
$bashExifEdit
的内容写入其中,瞧!根据图像的纬度/经度自动设置所有GPS详细信息(海拔高度除外,海拔高度与纬度/经度相差不大)。

您处理的图像类型是什么?PNG?位图?JPEG?@Thomas Owens-我认为它们意味着更多的非二进制元数据,如
标记或
alt
属性……元数据是否仅适用于JPEG图像?关于PNG和GIF呢?用一些见解更新了我的原始答案链接不再可用,因此:+1用于IPTC嵌入,但不幸的是,iptcembed不足以在大多数情况下操作,并且在多字节头数据方面也存在问题。并且只支持JPEG。更多信息:iptc.org。我建议将imagemagick与简单的php包装一起使用。它不会使元数据成为映像文件的一部分,而是HTTP响应的一部分,因此如果用户保存映像文件,元数据将丢失。未提及自定义HTTP头必须以
X-