-
Notifications
You must be signed in to change notification settings - Fork 5
Cтруктура хранения png файлов
Nastya Birillo edited this page Oct 29, 2015
·
5 revisions
- Подпись
- Несколько блоков (чанков\chunks)
Подпись файла: Подпись png-файла всегда одинакова и состоит из 8 бит и представляет собой: 89 50 4E 47 0D 0A 1A 0A где:
- 89 - non-ASCII символ. Препятствует распознаванию PNG, как текстового файла, и наоборот
- 50 4E 47 - PNG в ASCII записи
- 0D 0A - CRLF (Carriage-return, Line-feed) – возврат каретки и перевод строки (DOS-style)
- 1A - останавливает вывод файла в DOS режиме (end-of-file) (чтобы избежать вывода изображения в текстовом виде)
- 0A - LF, перевод строки (Unix-style)
Чанки (chunks): Чанки – блоки данных, из которых состоит файл. Каждый чанк состоит из 4 секций:
- Длина (4 байта) – числовое значение длины блока данных
- Тип (имя) чанка (4 байта)
- Содержание чанка
- Контрольная сумма CRC (4 байта)
Тип: Тип – четыре чувствительные к регистру ASCII-символа. Регистры символов (пятый бит в числовой записи символа) в имени чанка — это флаги, которые сообщают декодеру некоторую дополнительную информацию.
- Регистр первого символа определяет, является ли данный чанк критическим(верхний регистр) или вспомогательным(нижний регистр).
- Критические чанки должны распознаваться каждым декодером. Если декодер встречает критический чанк, тип которого не может распознать, он обязан завершить выполнение с ошибкой.
- Регистр второго символа задает «публичность»(верхний регистр) или «приватность»(нижний регистр) чанка.
- «Публичные» чанки — официальные, задокументированные, распознаваемые большинством декодеров. Но если вдруг вам для каких-то своих нужд понадобится кодировать специфическую информацию, то просто в имени чанка сделайте второй символ маленьким.
- Регистр третьего символа оставлен для будущего распознования. Предполагается, что он будет использоваться для дифференциации различных версий стандарта.
- Для версий 1.0 и 1.1 третий символ должен быть большим. Если он оказался маленьким, все нынешние декодеры должны поступать с чанком, так же как и с любым другим не распознанным (то есть выходить с ошибкой, если чанк критический, или пропускать в противном случае).
- Регистр четвертого символа означает возможность копирования данного чанка редакторами, которые не могут его распознать.
- Если регистр нижний, чанк может быть скопирован, вне зависимости от степени модификации файла, иначе (верхний регистр) он копируется только в случае, когда при модификации не были затронуты никакие критические чанки.
Пример:
Минимальный png-файл: Минимальный png-файл имеет:
- подпись
- 3 обязательных чанка: IHDR, IDAT, IEND
IHDR: Блок данных в IHDR содержит следующие поля:
- Ширина, 4 байта
- Высота, 4 байта
- Битовая глубина (bit depth), определяет количество бит на каждый сэмпл (не пиксель), 1 байт
- Тип цвета, состоит из 3 флагов: 1 (используется палитра), 2 (используется цвет, не монохромное изображение), 3 (присутствует альфа-канал), 1 байт
- Метод сжатия. На данный момент доступно только значение 0 — сжатие по алгоритму deflate/inflate. Если значение отлично от 0, чанк считается нераспознанным, и декодер рапортует об ошибке. 1 байт
- Метод фильтрации. Так же, как и в случае сжатия, на данный момент может быть только нулем. 1 байт
- Interlace(переплетение) метод. Определяет порядок передачи данных. На данный момент доступно 2 значения: 0 (no interlace) и 1 (Adam7 interlace). 1 байт
IEND: Сигнализирует о конце файла, блок данных этого чанка не содержит ничего.
IDAT: Содержит данные, закодированные, в соответствии с полем метода сжатия в заголовке.
Литература:
- Структура PNG http://habrahabr.ru/post/130472/
- Стили кодирования
- [Java](Код стайл для языка Java)
- [C/C++](Стиль написания кода на С )
- [C#](Стиль написания кода на С# )
- [Swift](Руководство по оформлению кода на языке Swift )
- Написание комментариев к коммитам
- Android
- Android DevGuide
- [QR codes](Работа c QR на Android)
- [Полезные вещи](Полезные вещи для Android разработки)
- [Архитектура приложения](Архитектура приложения)
- [Используемые компоненты](Используемые компоненты)
- [Инструкция по сборке проекта](Инструкция по сборке проекта)
- iOS
- [Код на C++ под iOS](Использование кода и библиотек cpp при создании приложений на языке Swift)
- Стилевые таблицы NSS
- Структура проекта в Xcode
- Clean Architecture
- C и C++
- [Использование CMake для проектов на C++ и C ](Использование CMake для проектов на C и CPP)
- Форматы файлов
- [.bmp](Cтруктура хранения bmp файлов)
- [.jpg](Cтруктура хранения jpg файлов)
- [.png](Cтруктура хранения png файлов)
- Алгоритмы шифрования
- Кодирование информации псевдослучайными последовательностями чисел
- Визуальная криптография
- Схема разделения секретной визуальной информации
- Шифрование RGB изображения с помощью Фурье образа
- RSA-шифрование .bmp файлов
- Примеры использования
- [Библиотека матричной алгебры](Пример использования библиотеки матричной алгебры)
- Описание процесса кодирования файла
- Способ обезопасить использование приложения
- Java фасад библиотеки алгоритмов
- Алгоритм шифрования bmp на java заглушке
- Матричная арифметика
- [A+B](Сложение матриц)
- [A*p](Умножение матрицы на скаляр)
- [A*B](Умножение матриц)
- [Обратные матрицы](Нахождение обратной матрицы)
- Взятие по модулю
- [A
mod
p](Взятие матрицы по модулю простого числа) - [A
mod
P](Взятие матрицы по модулю - матрицы из простых чисел)
- Суперпозиция (модуль - простое число)
- [A+B
mod
p](Сложение матриц по модулю простого числа) - [A*c
mod
p](Умножение матрицы на скаляр по модулю простого числа) - [A*B
mod
p](Умножение матриц по модулю простого числа)
- Суперпозиция (модуль - матрицы из простых чисел)
- [A+B
mod
P](Сложение матриц по модулю - матрице простых чисел) - [A*c
mod
P](Умножение матрицы на скаляр по модулю - матрице простых чисел) - [A*B
mod
P](Умножение матриц по модулю - матрице простых чисел)
##Прочее
- [Утечки памяти](Memory Leaks)
- [Базовые цвета](Базовые цвета)
- [Clean Architecture](Clean Architecture)