Я хотел бы извлечь два поля из файла PNG. А именно, поле геометрии и одно из полей из метаданных.
Каким будет самый быстрый способ сделать это? Я проверил свой сценарий, который в настоящее время выполняет это, и тем самым самым медленным действием является выполнение фактической программы «Идентификация» ImageMagick в файле PNG. (.4 секунды против .0001 секунд для анализа выделенного массива для геометрии и 8.39E-5 секунд для анализа ключевых фраз из метаданных)
Заранее благодарю за любую помощь,
Джонатан
Я не знаком с готовыми библиотеками или классами, чтобы делать это на PHP без вызова подпроцесса, но если вы не можете найти его, писать свой собственный, безусловно, будет путь.
PNG – довольно простой формат потока блоков, поэтому поиск определенного блока и извлечение некоторых полей заголовков тривиальны.
Все, что вам нужно, это то, что читает и проверяет 8-байтовый заголовок 89 50 4E 47 0D 0A 1A 0A
PNG, а затем чередует между чтением 8 байтов (длина блока плюс тип) и ищет прошлое блока, используя длину, пока вы не нажмете тип блока, который вы хотите.
Для геометрии, предполагая, что PNG следует спецификации, вот как это получится:
type = IHDR
Вероятно, мне понадобится от 5 до 15 минут, чтобы взломать что-то подобное на Python. (Я сделал аналогичные вещи с RAR и GIF) Возможно, с 15 до 25 в PHP, поскольку у меня меньше опыта работы с файлами ввода-вывода низкого уровня.