Тест ответа 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;