Я не знаком ни с какими готовыми библиотеками или классами, чтобы делать это на PHP без вызова подпроцесса, но если вы не можете его найти, то, безусловно, стоит написать собственное.
PNG - довольно простой формат блочного потока, поэтому поиск определенного блока и извлечение некоторых полей заголовка тривиален.
Все, что вам нужно, это что-то, что читает и проверяет 8-байтовый 89 50 4E 47 0D 0A 1A 0A
заголовок PNG, а затем чередует чтение 8 байтов (длина фрагмента плюс тип) и поиск по блоку, используя длину, пока вы не достигнете типа фрагмента ты хочешь.
Для геометрии, если PNG следует спецификации, вот как это будет:
- Считать и проверить заголовок PNG (8 байт)
- Чтение и проверка заголовка первого блока (8 байт).
- Успех.
type = IHDR
- Считать дополнительные 8 байтов для геометрии (ширина, высота. 4 байта каждый)
- Если другое требуемое поле отсутствует в IHDR , используйте размер фрагмента, начиная с шага 2, чтобы перейти к следующему блоку в поисках другого требуемого поля.
Вероятно, мне понадобится от 5 до 15 минут, чтобы создать что-то подобное в Python. (Я делал подобные вещи с RAR и GIF) Может быть, 15-25 в PHP, так как у меня меньше опыта выполнения низкоуровневых файловых операций ввода-вывода.