Я использую функцию, чтобы проверить, имеет ли изображение оттенки серого или нет, пути и имена файлов загружаются правильно, а иногда они работают нормально.Php проверить, является ли изображение серым цветом ошибка памяти памяти
Однако он начал приносить обычную память измученным ошибкам, поэтому мне интересно, что это вызывает?
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in ... on line 51
Линия 51 является $b[$i][$j] = $rgb & 0xFF;
Как я могу оптимизировать эту функцию, чтобы использовать меньше памяти, возможно, только у половины изображения затем работать в среднем или среднем слишком высока?
function checkGreyscale(){
$imgInfo = getimagesize($this->fileLocation);
$width = $imgInfo[0];
$height = $imgInfo[1];
$r = array();
$g = array();
$b = array();
$c = 0;
for ($i=0; $i<$width; $i++) {
for ($j=0; $j<$height; $j++) {
$rgb = imagecolorat($this->file, $i, $j);
$r[$i][$j] = ($rgb >> 16) & 0xFF;
$g[$i][$j] = ($rgb >> 8) & 0xFF;
$b[$i][$j] = $rgb & 0xFF;
if ($r[$i][$j] == $g[$i][$j] && $r[$i][$j] == $b[$i][$j]) {
$c++;
}
}
}
if ($c == ($width * $height))
return true;
else
return false;
}
Я бы подумал, что было бы лучше проверить, если '$ r',' $ g' и '$ b' не равны, а затем немедленно возвращаются, если нет, - нет точки, проверяющей остальное, как только один пиксель isn ' t серый - он должен быть быстрее, чем всегда проверять все. –