Подробный гайд по проверке параметров кодирования .cgm
Проверка параметров кодирования файлов .cgm (Computer Graphics Metafile) — это многоуровневый процесс, который включает в себя анализ как структуры самого файла, так и значений конкретных параметров. В отличие от многих других форматов, CGM может использовать три различных способа кодирования данных, что и определяет сложность проверки. Ниже представлен подробный гайд, основанный на стандартах ISO/IEC 8632 и профилях применения, таких как WebCGM.
1. Понимание трех типов кодирования CGM
Первым шагом является определение того, какой тип кодирования используется в вашем файле.
Согласно стандарту, существует три основных способа представления данных:
- Clear Text Encoding (Кодирование в виде читаемого текста): Данные представлены в виде текстовых строк, которые можно прочитать и отредактировать вручную. Этот формат часто используется для отладки и ручного создания файлов.
- Character Encoding (Символьное кодирование): Данные кодируются с использованием только печатных символов ASCII (ISO 7-bit). Этот метод обеспечивает компактность и удобство передачи по сети.
- Binary Encoding (Бинарное кодирование): Данные представлены в виде потока байтов. Это наиболее компактный и эффективный для обработки формат, который часто используется для хранения и передачи внутри систем.
Файлы WebCGM, например, обычно используют бинарное кодирование, но стандарт также допускает и другие варианты.
2. Проверка "магических байтов" (сигнатуры файла)
Самый простой способ убедиться, что файл является CGM, — проверить его начальные байты (сигнатуру). Для файлов CGM стандартная сигнатура — это 42 45 47 4D 46 (в шестнадцатеричном виде), что соответствует ASCII-строке BEGIN MF. Вы можете проверить это с помощью любого hex-редактора.
3. Детальная проверка параметров
Если сигнатура верна, можно приступать к более глубокому анализу. Для бинарного кодирования стандарт FIPS 128 (часть ISO 8632) определяет строгие правила, которые можно проверить.
Проверка точности и типов данных
Эти параметры определяют, как числа хранятся в файле. Их можно проверить, анализируя заголовки элементов или используя специализированные инструменты.
* INTEGER PRECISION:
Должна использоваться только 16-битная точность.
* REAL PRECISION:
Допускается использование только 32-битной фиксированной точки или 32-битной точности с плавающей точкой.
* INDEX PRECISION:
Должна использоваться только 16-битная точность.
* COLOUR PRECISION:
Допускается только 8-битная и 16-битная точность.
* COLOUR INDEX PRECISION:
Также допускается только 8-битная и 16-битная точность.
* VDC INTEGER PRECISION:
Если используются целочисленные VDC, точность должна быть либо 16-битной, либо 32-битной.
* VDC REAL PRECISION:
Если используются VDC с плавающей точкой, точность должна быть либо 32-битной с плавающей точкой, либо 32-битной с фиксированной точкой.
Проверка наборов символов и кодировки текста
Это критически важный аспект, особенно для корректного отображения текста.
* CHARACTER SET LIST:
Список наборов символов должен содержать только два элемента: {(0,4/2), (1,4/1)}, что соответствует ASCII (символ "B") и ISO 8859/1 (символ "A").
* CHARACTER CODING ANNOUNCER:
Если этот элемент используется, его значение должно быть либо 0, либо 1.
* Кодировка по умолчанию:
По стандарту, кодировкой по умолчанию для строковых параметров в начале metafile id является ISO Latin 1.
* UTF-8 и UTF-16:
Если метафайл использует UTF-8, первые 4 октета параметра metafile id должны содержать последовательность ESC 2/5 2/15 4/9. Для UTF-16 используется последовательность ESC 2/5 2/15 4/12. В бинарном кодировании строки Unicode должны быть в формате big-endian.
* Ограничения на переключение ISO 2022:
Использование переключения ISO 2022 запрещено в нетекстовых строках, если оно не разрешено профилем (например, WebCGM).
Проверка ограничений на значения элементов
Профили, такие как CALS CGM Application Profile (MIL-D-28003), накладывают дополнительные ограничения на значения параметров:
- TRANSPARENCY: Если элемент используется, его значение всегда должно быть
1. - Индексы BUNDLE: Значения для LINE, MARKER, FILL и EDGE BUNDLE INDEX должны находиться в диапазоне от 1 до 5.
- Типы линий и маркеров: LINE TYPE и MARKER TYPE должны быть в диапазоне от 1 до 5 (плюс специальные значения CALS для LINE TYPE).
- Индексы текста: TEXT BUNDLE INDEX может быть только
1или2, а TEXT FONT INDEX — от1до4. - Наборы символов: CHARACTER SET INDEX и ALTERNATE CHARACTER SET должны быть
1или2. - Штриховка и края: HATCH INDEX — от 1 до 6, EDGE TYPE — от 1 до 5.
- Таблицы: Начальный индекс PATTERN TABLE — от 1 до 8, количество строк и столбцов — от 1 до 16. Начальный индекс COLOUR TABLE — от 0 до 255.
- Сообщения: Флаг действия в элементе MESSAGE всегда должен быть "no action required".
- Размеры массивов: Количество цветов в массиве не должно превышать 1048576 для CELL ARRAY, 2048 для PATTERN TABLE и 256 для COLOUR TABLE.
- Количество точек: Количество точек и VDC в параметрах любого элемента не может превышать 1024.
- Длина строк: Все строковые элементы ограничены 254 символами, за исключением записей данных, которые могут содержать до 32767 символов.
4. Инструменты для проверки
Ручная проверка всех этих параметров может быть трудоемкой.
Для автоматизации процесса можно использовать следующие подходы:
- Просмотрщики CGM: Онлайн-инструменты, такие как GroupDocs Viewer, позволяют открыть файл и визуально оценить его корректность.
- Скрипты и парсеры: Вы можете написать собственный скрипт на Python или другом языке для анализа структуры файла. В открытом доступе существуют примеры парсеров и инструментов для проверки, которые можно адаптировать под свои нужды.
- Специализированное ПО: Некоторые графические редакторы (например, CorelDRAW) имеют встроенные функции импорта CGM и могут предоставлять информацию о параметрах кодирования.
Важно
Проверка параметров кодирования .cgm требует понимания стандарта и внимательного анализа. Ключевыми моментами являются определение типа кодирования, проверка сигнатуры файла и валидация конкретных параметров точности, наборов символов и ограничений на значения. Использование автоматизированных инструментов и скриптов может значительно упростить этот процесс.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.