Как мне получить размеры изображения в AWS S3, к которому я обращаюсь с помощью фасада хранилища в Laravel?

У меня есть изображения, хранящиеся в AWS S3, и я использую фасад Storage в Laravel, чтобы отображать их на веб-странице.

В некоторых случаях я хочу получить размеры некоторых изображений и сохранить их в БД.

Я думал об использовании функции getimagesize в PHP, но изображения не являются общедоступными, и к ним можно получить доступ только через фасад Storage.

Как я могу получить размеры этих изображений? Спасибо.

Изменить: я должен упомянуть, что вся эта обработка изображений выполняется для миграции БД, поэтому использование интерфейсного веб-решения, такого как JS, для получения размеров изображения нецелесообразно.


person HartleySan    schedule 19.06.2019    source источник


Ответы (2)


Я придумал решение, которое, кажется, работает. Обычно я получаю двоичный файл с фасадом Storage, а затем использую функции imagecreatefromstring, imagesx и imagesy, чтобы получить ширину и высоту изображения.

Вот пример:

$contents = Storage::get($storageFilePath);
$im = imagecreatefromstring($contents);
$width = imagesx($im) ?? null;
$height = imagesy($im) ?? null;
person HartleySan    schedule 19.06.2019

Вы также можете использовать библиотеку с открытым исходным кодом Intervention \ Image, которая использует GD Library и Imagick:

$image = \Image::make(Storage::get($storageFilePath));
$width = $image->width();
$height = $image->height();
person murcoder    schedule 08.01.2021
comment
Отличная идея. Спасибо. - person HartleySan; 08.01.2021