【问题标题】:Laravel Storage::get() does not return exif data of imageLaravel Storage::get() 不返回图片的 exif 数据
【发布时间】:2017-04-02 19:47:01
【问题描述】:

我正在尝试获取图像 exif 数据,以便我可以使用图像干预定向功能。

唯一的问题是我无法使用 Storage::get() 读取 exif 数据

首先我像这样存储上传的图像:

$filename = uniqid().'.'.$file->getClientOriginalExtension();
$path = "images/$id/$filename";
Storage::put($path, File::get($file->getRealPath()));

在队列中,我正在阅读图片、调整大小并上传到 AWS:

$image = Image::make(Storage::disk('images')->get("$this->id/$file"));
            $image->orientate();
            $image->resize(null, 600, function ($constraint) {
                $constraint->aspectRatio();
            });
            $image->stream('jpg', 85);
Storage::put("images/$this->id/main/$file", $image);
$image->destroy();

图像确实会调整大小并上传到 AWS,但唯一的问题是它会横向显示,所以我似乎无法使用以下方法读取 exif 数据:

Storage::disk('images')->get("$this->id/$file")

我已经运行了:php -m |更多,我可以看到“exif”已列出,因此我的 Laravel Forge DO 服务器中有该模块

【问题讨论】:

    标签: php image laravel


    【解决方案1】:

    通过以下命令安装Intervention\Image

    composer require intervention/image

    更新config/app.php

    'providers' => [ Intervention\Image\ImageServiceProvider::class ], 'aliases' => [ 'Image' => Intervention\Image\Facades\Image::class ]

    使用库:

    $data = Image::make(public_path('IMG.jpg'))->exif(); if(isset($data['GPSLatitude'])) { $lat = eval('return ' . $data['GPSLatitude'][0] . ';') + (eval('return ' . $data['GPSLatitude'][1] . ';') / 60) + (eval('return ' . $data['GPSLatitude'][2] . ';') / 3600); $lng = eval('return ' . $data['GPSLongitude'][0] . ';') + (eval('return ' . $data['GPSLongitude'][1] . ';') / 60) + (eval('return ' . $data['GPSLongitude'][2] . ';') / 3600); echo "$lat, $lng"; } else { echo "No GPS Info"; }

    【讨论】:

      【解决方案2】:

      要从图像干预中获取 exif 数据,您必须运行 exif() 函数

      很简单,只要加上:

      $image->exif();
      

      exif() 函数将返回一个 array() 中的所有现有数据;

      您可以将参数传递给exif() 函数,该函数将返回字符串中的一些信息,例如:$image->exif('model')

      您可以在图片intervention website 上阅读更多相关信息

      【讨论】:

      • 但是光跑还不够吗? Image::make('foo.jpg')->orientate();image.intervention.io/api/orientate
      • 不,你必须添加 exif() 函数,因为它返回一个 array()。
      • 所以你可能会做 Image::make('foo.jpg')->orientate()->exif();我相信,但不完全确定。
      • 看来,一旦我存储了图像,我就无法读取orientate() 如果我直接使用例如 $request->file() 就可以了
      • $request->file() 返回一个对象。 file_get_contents($request->file()) 返回一个您传递给 Image::make() 函数的字符串。
      【解决方案3】:

      某些图像处理软件实际上会删除元数据。如果您安装了 GD 并且没有元数据,则它可能不存在。最好的测试方法是尝试另一张图片。

      【讨论】:

        猜你喜欢
        • 2018-10-27
        • 2014-12-13
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 2023-02-08
        • 1970-01-01
        相关资源
        最近更新 更多