PHP - JPEG-изображение в RGB-значение Array Count - PullRequest
1 голос
/ 09 января 2020

Я хочу получить массив значений RGB из изображения и посчитать данные внутри массива. Например (2 X 2 пикс. Пример)

[[[R, G, B], [R, G, B]], [[R, G, B], [R, G, B]]]
Data = 12
SUM = total from all of the RGB values

Код, который у меня сейчас есть:

    <?php
    // open an image
    $image = imagecreatefromjpeg('image.jpg'); // imagecreatefromjpeg/png/
    // get image dimension, define colour array
    $width = imagesx($image);
    $height = imagesy($image);
    $colors = [];
    for ($y = 0; $y < $height; $y++)
    {
        for ($x = 0; $x < $width; $x++)
        {
            $rgb = imagecolorat($image, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            $y_array=array($r,$g,$b);
            $x_array[]=$y_array;
        }
        $colors=$x_array;
    }
    print_r($colors);
    print_r(sizeof($colors));
    print_r(array_sum($colors));
    ?>

Вывод, который я получаю:

[[[0, 255, 0], [255, 0, 0]], [[0, 0, 255], [255, 255, 255]]]
    Data = 2
    SUM = 0

Выше приведено не работает. Мое изображение теперь просто в формате JPEG размером 2 X 2 пикселя, которое должно вывести:

[[[0, 255, 0], [255, 0, 0]], [[0, 0, 255], [255, 255, 255]]]
Data = 12
SUM = 0+255+0+255+0+0+0+0+255+255+255+255 = 2295

Любая помощь с благодарностью!

1 Ответ

1 голос
/ 09 января 2020

Основная проблема здесь заключается в том, что вы не сохраняете значение.

Добавить:

$colors[] = [ $r, $g, $b ];

после:

$b = $rgb & 0xFF;
...