Формат Corel DRAW X6 разобран, поддержка добавлена в libcdr

Источник: linuxgraphics
linuxgraphics

Два месяца назад мы уже писали о новом проекте libcdr, в рамках которого разрабатывается библиотека для чтения файлов Corel DRAW и конвертер в SVG. Пора рассказать о том, что было сделано за это время.

Проект продолжает активно развиваться. За истекшие два месяца было внесено множество изменений, реализующих поддержку самых разных возможностей формата. С форматов и начнём.

Форматы файлов

В середине марта компания Corel выпустила новую версию своего флагманского приложения Corel DRAW и в очередной раз поменяла формат хранения данных. Объединённой команде LibreOffice/re-lab понадобилась неделя, чтобы заметить релиз, и всего несколько дней, чтобы разобраться с изменениями и реализовать минимальную поддержку формата в libcdr.

В библиотеке также появилась поддержка формата v6, так что диапазон поддерживаемых версий теперь простирается от 6 до 16, что, вообще говоря, для третьестороннего софта - практически уникальное явление. Добавлен и кое-какой код для чтения файлов CMX, в которых часто распространяется клипарт Corel.

Объекты

В libcdr 0.0.6 появилось чтение размера страницы, спецобъектов, многоугольников, B-сплайнов и внедрённого растра. Кроме того, было исправлено чтение закруглённых прямоугольников и вертикального порядка объектов.

Свойства

Улучшенная поддержка пунктира, стилей и типов линий, а также исправленная имитация волосных линий - это всё замечательно и полезно, но не так интересно как некоторые другие изменения.

Прежде всего, в библиотека появилась начальная поддержка градиентов. Она пока что не идеальна: иногда это попадание в точку, иногда ручки градиентов смещаются, приводя к изменению внешнего вида заливки. Имеющиеся недочёты будут исправлены. Просто для иллюстрации приведём небольшой пример. Вот оригинал в CDR:

Вот сконвертированный файл SVG, открытый в Inkscape:

Новая версия также читает цвета, записанные в моделях HSB, LAB и HLS, плюс цвета палитр HKS. Кроме того, Фридрих проконсультировался с Марти Марией и реализовал начальную поддержку цветоуправляемого преобразования из CMYK в RGB посредством LittleCMS v2, а буквально в пятницу появилась первая версия кода для чтения цветовых профилей, встраиваемых в файлы CDR.

Библиотека также научилась читать узорные и текстурные заливки, понимая при этом параметр растяжения текстур.

Иными словами, по качеству поддержки формата CDR библиотека libcdr превосходит публично доступную версию UniConvertor, хотя всё ещё не читает группировку объектов. В блоге Фридриха есть картинки Corel DRAW и SVG, которые любой желающий может сравнить с официальным результатом UniConvertor.

Сборка libcdr

Повторимся: для тестирования libcdr крайне желательно работать с версией из репозитория Git.

Получаем:

$ git clone git://anongit.freedesktop.org/libreoffice/libcdr

Собираем:

$ ./autogen.sh && ./configure && make && sudo make install

Используем:

$ cdr2xhtml file.cdr > file.xhtml

Полученный файл XHTML открываем в текстовом редакторе, удаляем начало и хвост файла, относящиеся к XHTML. Результат открываем в Inkscape.

Что дальше

По всей очевидности, следующей по порядку будет поддержка текста. Предварительный разбор этой части формата командой re-lab уже выполнен.

Библиотека libcdr будет использоваться в LibreOffice 3.6


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=29114