0

我使用带有 GD 库的 PHP 7.1。

我的脚本会在保存之前下载图像并调整其大小。服务器有 256MB 内存(不能增加)。

一些图像具有较大的物理尺寸(不是文件大小),大于 50Mpx。当我尝试使用 GD 调整它的大小时,此行中出现内存限制错误:

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

脚本以 PSR-7 HTTP 响应的形式获取图像。在调整图像大小之前,我需要测试它是否有足够的内存来调整图像大小?

我尝试按文件大小测试图像,但它会丢弃物理大小正常但文件大小较大的图像:

<?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 响应对象中获取它?

4

1 回答 1

0

您可以将响应正文转换为字符串并在其上使用getimagesizefromstring()

<?php
$imageData = (string) $response->getBody();
[$width, $height] = getimagesizefromstring($imageData);
$px = $width * $height;
于 2018-09-05T06:51:45.893 回答