php - 如何在 PHP 中添加 Gpano XMP 元数据?

标签 php image metadata 360-degrees

我需要在 PHP 中以编程方式添加 Gpano 元数据,但我不知道该怎么做。

输入: 没有 Gpano 元数据的简单 360 度图像。 格式:jpeg、jpg。

输出: 该图像必须与具有 Gpano 元数据的 Facebook 360 兼容:

<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
    <GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
    <GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
    <GPano:CroppedAreaImageWidthPixels>4000</GPano:CroppedAreaImageWidthPixels>
    <GPano:CroppedAreaImageHeightPixels>2000</GPano:CroppedAreaImageHeightPixels>
    <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
    <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
    <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
    <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
    <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>

最重要的是这些行:

<GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
<GPano:ProjectionType>equirectangular</GPano:ProjectionType>

我尝试了此处提供的 PHP JPEG 元数据工具包:http://www.ozhiker.com/electronics/pjmt/ 这是我的代码,但不知道要添加什么:

require_once('PHP_JPEG_Metadata_Toolkit_1.12/JPEG.php');
require_once('PHP_JPEG_Metadata_Toolkit_1.12/XMP.php');

$metas = get_jpeg_header_data('image.jpg');
put_XMP_text($metas, 'what to write here ?');

我也尝试过运行完美的 Windows 软件,但无法在我的网络服务器(Linux)上使用它:Exif Fixer for Windows 此处可用:http://panoramaphotographer.com/software/exiffixer/

如果有人可以帮助我编写代码,或者如果有人可以发布一个有效的示例,那就太棒了!

提前谢谢大家。

最佳答案

我使用了The PHP JPEG Metadata Toolkit .

请注意,它已经几年没有更新了,并且可能会在 PHP 7+ 中引发一些可以轻松修复的错误(例如短开头 php 标签和数字前的 0)。

修复此问题后,用法非常简单:

require 'PHP_JPEG_Metadata_Toolkit_1.12/' . 'EXIF.php';

$filename = 'test.jpg';
$jpeg_header_data = get_jpeg_header_data($filename);
$xmp = '
<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
<GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
<GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
<GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
<GPano:ProjectionType>equirectangular</GPano:ProjectionType>
<GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
<GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
<GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
<GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
<GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
<GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
<GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
<GPano:CroppedAreaImageWidthPixels>4000</GPano:CroppedAreaImageWidthPixels>
<GPano:CroppedAreaImageHeightPixels>2000</GPano:CroppedAreaImageHeightPixels>
<GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
<GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
<GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
<GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
<GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
<GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>
';
$jpeg_header_data = put_XMP_text($jpeg_header_data, $xmp);
put_jpeg_header_data($filename, $filename, $jpeg_header_data);

您可以在 Google Developers documentation page 中找到有关所需 XMP 元数据的更多信息。 .

关于php - 如何在 PHP 中添加 Gpano XMP 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813406/

相关文章:

php - mysql 查询 2 个表的总和

php - Laravel 社交名流 Google 登录在本地环境中失败并出现 401

php - 如何反序列化数组并为每个数据插入查询?

html - 在 Firefox 上制作灰度图像

html - 将图像从 XML 插入到 XSL 文档

docker - 如何编辑现有的 docker 镜像元数据?

swift - 区分 NSFileWrapper 和目录?

php - 目录中每个文件的循环代码

c# - wpf 图像资源和在运行时在 wpf 控件中更改图像

sas - 在 SAS Base 上通过程序在 SAS Metadata Server 中创建内部帐户