PSD parser или как разобрать файл Photoshop на Java

Как то предложили сделать парсер psd файла. Вроде бы очень просто. Надо найти из каких слоёв состоит документ, вывести перечень слоёв. Если слой текстовый, вывести текст и параметры форматирования. Т.е. названия шрифтов, размеры, отступы и т.д.

С чего начать?
Да поможет нам гугл. Море информации, куча подробностей как делать плагины для фотошопа. Но это всё не то. Нужна консольная программа, которая будет получать на вход psd файлы и выдавать на выходе текстовое описание его внутренностей. Установка фотошопа изначально не планировалась.

Самым полезным оказался вот этот документ: PhotoshopFileFormat — собственно спецификация структуры файла photoshop. Эдакий побайтный скелет .psd файла, как раз то, что доктор прописал.

Далее погуглил на предмет того, а делали ли что либо подобное коллеги на java?
Да, оказывается и такое есть. Parser-psd — краткое описание + исходники там же. Их программа разбирает файл на слои, причём сохраняет их в отдельные файлы(!) плюс добывается информация по нарезке(slices). Для моей задачи немного не то, но как начальный пример очень даже помог.
Файл загоняется в обычный поток DataInputStream in = new DataInputStream(input) и далее работаем с этим потоком побайтно.
Сам файл состоит из пяти основных секций:
1. File header
2. Color mode data
3. Image resources
4. Layer and mask information
5. Image data

header имеет фиксированный размер, а вот остальные блоки могут иметь разный размер. С этим повнимательнее. Один байт мимо и всё дело накроется. Размер указывается в первых четырёх байтах блока, поэтому блоки можно проскакивать, если всё парсить не надо in.skipBytes(size).
Тут главное внимание и чёткое следование спецификации. Внимание! От версии к версии формат меняется, в спецификации эти различия указываются. Однако текущая спецификация, которую мне удалось найти от 2010 года, а мне пришлось пользоваться ещё более старым описанием за 2007й год. Поэтому при разборе самых свежих версий файлов можно промахнуться.

ссылка на оригинал статьи http://habrahabr.ru/post/261511/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *