Как преобразовать поток zlib в PNG?
У меня уже есть поток данных изображения в кодировке zlib (взятый из тега PDF /FlateDecode). Я также получил ширину и высоту в пикселях, а также глубину цвета (8 bpp). Данные упакованы RGB. Теперь я хочу сохранить это как изображение PNG (какой метод сжатия по умолчанию также ZLIB, я думаю?). Я попытался добавить заголовок PNG и заголовок IDAT вручную, но это не сработало. У кого-нибудь есть идеи, как правильно это сделать? (libpng?)
Целевая система имеет очень ограниченные ресурсы ОЗУ, поэтому декодирование данных zlib и перекодирование с помощью libpng не обсуждаются.
1 ответ
Вам нужно будет распаковать, переформатировать данные для PNG и повторно сжать. Данные изображения, которые сжимаются в файле PNG, являются не просто необработанными данными RGB. Согласно спецификации, каждой строке изображения предшествует байт фильтра, который определяет, как эта строка отличается (или нет) от предыдущих данных. Даже если вы не делаете различий, вам нужен этот байт, чтобы сказать это. Однако вы получите намного лучшее сжатие с одним из режимов фильтра.