На счет инвертирования не понял - зачем?
Я на вскидку не скжу, но мне кажется что если у нас есть две точки со значениями, например, 1 и 2, то это 0001 и 0010, то результирующий байт будет 00010010.
Да, конечно, варианты:
1) Найти откуда запускается php (там вероятно будет символьная ссылка на php7) и заменить ее на ссылку на php56
2) Найти php56 и запустить напрямую /path/to/php56 ./yii migrate
3) Заменить в начале файла ./yii ссылку на php на правильную, к php56
Выполните: php -v
Возможно вас ожидает сюрприз.
В любом случае - php выполняемый через apache и из консоли могут отличаться.
Ваш конфиг для консольного php лежит в /etc/php/7.0/cli
Видимо надо array_key_exists('mod'.$i, $all_fieds) заменить на array_key_exists('mod'.$i, $all_fieds) and ($all_fieds{'mod'.$i}...) вместо ... надо что-то дописать, в зависимости от структуры вашего массива, например $all_fieds{'mod'.$i}{'id'} != '' или другой отличительный признак проверить.
Цикл прокрутится 5 раз, но array_key_exists('mod'.$i, $all_fieds) выполнит условие if только если ключ modN существует. Если в массиве есть только mod3, то будет выведен только один блок.
Не стоит примешивать RGBQUAD туда куда не надо, читабельность кода страдает.
Просто массив unsigned char из n элементов, где n = ((Width + 31) / 32 (нацело)) * 4
Про кратность строки - возможны варианты. Можно в начале посчитать сколько байт нужно дописать к каждой строке. Ширину вы знаете, сколько байт она займет тоже - Width / 8 (нацело) +1 (если есть еще остаток от деления).
Формула grayscale: unsigned char grayscale = (unsigned char)((r * 0.35) + (g * 0.54) + (b * 0.11));
Количество байт на строку: ((Width + 31) / 32 (нацело)) * 4
Евгений Трофимов: Неплохо, теперь можно поискать формулу преобразования RGB -> Grayscale, там должны быть коэффициенты типа 0.3*R + 0.5*G + 0.2*B (условно) и выбрать порог около 128.
Я на вскидку не скжу, но мне кажется что если у нас есть две точки со значениями, например, 1 и 2, то это 0001 и 0010, то результирующий байт будет 00010010.