Тест ответа PHP 7 PSR-7, если скрипт может изменить размер изображения с помощью GD в условиях ограниченной памяти

Я использую PHP 7.1 с библиотекой GD.

Мой скрипт загружает изображения и изменяет их размер перед сохранением. Сервер имеет 256 МБ памяти (не может увеличиться).

Некоторые изображения имеют большой физический размер (не размер файла), превышающий 50 Мпикс. Когда я пытаюсь изменить его размер с помощью GD, в этой строке возникает ошибка ограничения памяти:

<?php 
$image = imagecreatefromjpeg($file);

Скрипт получает изображения в виде HTTP-ответа PSR-7. Перед изменением размера изображения мне нужно проверить его, достаточно ли памяти для изменения размера изображения?

Я пытался проверить изображения по размеру файла, но он отбрасывает изображения с нормальным физическим размером, но большим размером файла:

<?php 
$fileIsOk = (int)$response->getBody()->getSize() <= SOME_MAGIC_SIZE_IN_BYTES;
if ($fileIsOk) {
    // do the stuff
}

Например, мой сценарий не работает с изображением 50.2Mpx 1.51MB, но нормально с 3.6Mpx 1.02MB.

Моя идея состоит в том, чтобы проверить изображение, получив количество Mpx:

Поэтому мне нужно проверить, может ли скрипт изменить размер изображения в условиях ограниченного объема памяти на основе количества Mpx. Как я могу получить его от объекта ответа PSR-7?

1 ответ

Вы можете преобразовать тело ответа в строку и использовать getimagesizefromstring() для этого

<?php
$imageData = (string) $response->getBody();
[$width, $height] = getimagesizefromstring($imageData);
$px = $width * $height;
Другие вопросы по тегам