代码之家  ›  专栏  ›  技术社区  ›  user3768981

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

  •  2
  • user3768981  · 技术社区  · 7 年前

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

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

    输出: 该图像必须与Facebook 360配合使用Gpano元数据,如下所示:

    <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/ 下面是我的代码,但idk需要添加什么:

    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软件,但无法在我的Web服务器(linux)上使用它:Exif Fixer for windows 此处提供: http://panoramaphotographer.com/software/exiffixer/

    如果有人可以帮助我编写代码,或者有人可以发布一个有用的示例,那将非常棒!

    提前谢谢大家。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Thomas Orlita    6 年前

    我用了 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);
    

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