Ещё один простой блог в интернете, одного из жителей Сызрани, который считает себя дизайнером, WEB-мастером и фотографом-любителем

просто блог

QR CODE для записиQR CODE для записи “SVG на собственной шкуре. Часть 1 — создание SVG файла в CorelDraw”

SVG на собственной шкуре. Часть 1 — создание SVG файла в CorelDraw

В интернете полно руководств о том, как внедрить в HTML5 документ SVG графику. Ну конечно не только в HTML5. Во всех этих руководствах / статьях одно и тоже. Но реально они не рассказывают ни чего подробного. И большинство этих статей рассказывают о создание SVG объектов внутри кода страницы. И ни где нет подробного руководства о том, как подключить внешний файл на страницу. При этом чтобы он был как часть страницы, чтобы было полное взаимодействие с DOM, чтобы можно было манипулировать SVG файлом с помощью JS.

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

Свою сказку я пожалуй начну немного из далека

Создание SVG файла в CorelDraw и параметры при сохранение.

Я очень давно занимаюсь рекламой — полиграфия и наружка. В этой отрасли векторная графика очень развита в отличие от интернета. Большинство макетов делается непосредственно с применением CorelDraw или Adobe Illustrator, а макеты в Photoshop является плохим тоном.

Вместе с HTML5 и CSS3 нам теперь доступна и полноценная поддержка векторной графики во всех современных браузерах… Ну ладно, ладно — почти полноценная, но не за горами то время когда она будет полноценной. И уже сейчас смело можно использовать SVG в разработке сайтов, уже сейчас SVG графика может заменить некоторые ниши FLASH… Но это уже не по теме, это очередной холивар для отдельной темы, о которой я возможно пофлужу в отдельной теме.

И так, ближе к делу. Как я писал чуть выше — я очень долго работал с векторной графикой и её внедрение в HTML для меня очень радостное событие. Все свои файлы я создаю в CorelDraw X5. Он корректно сохраняет SVG. Конечно есть и бесплатные аналоги, такие как Inkscape, но:

  • Я им не пользуюсь. Хоть он и самый мощный аналог Corel’a и Illustrator’а из бесплатных программ и я его уважаю за то, что он OpenSourse, но он еще очень молодой и слабый по сравнению со своими старшими платными собратьями.
  • В интернете много написано о том, что Inkscape сохраняет не корректно SVG. Хотя есть инструмент, который исправляет его ошибки правит, но об этом ниже.

Дальше я приведу небольшое руководство по сохранению файла из CorelDraw X5. В Illustrator’е и Inkscap’е я не пробовал сохранять, но процесс наверняка схожий.

Сначала дам один совет по оптимизации самого изображения — избегать Behind fill (контур под объектом) у контуров. Corel при экспорте в SVG будет создавать дубликат объекта. В таких случаях лучше сделать толщину контура в два раза меньше. Если это не возможно, то лучше конвертировать контур в объект и ручками удалить лишние узлы.

Для примера в CorelDraw X5 я создал два простых примитива — круг и квадрат с контурами.
Два простых примитива - круг и квадрат с контурами в CorelDraw X5
Сохраняем нарисованное в SVG. Сохранять можно через «Export» или «Save As». Какой способ выбрать — значения не имеет.
Сохранение в SVG из CorelDraw X5

В появившемся диалоговом окне Экспорта / Сохранения выбираем формат SVG.
Сохранение в SVG из CorelDraw X5

Жмём «Сохранить» (ну или «Экспорт» — в зависимости от выбранного вами способа) и перед нами появится окно настроек SVG файла.
Окно настроек SVG файла при сохранение из CorelDraw X5

Encoding Method

Оставляем как есть в Unicode — UTF-8

Styling Options

Первым делом решим — хотим ли мы что бы стили были внутри SVG файла или были вынесены в отдельный файл. Тут принцип работы ни чем не отличается от работы стилей в HTML+CSS.

В большинстве случаев стили лучше встраивать в файл. Для этого необходимо выбрать пункт Internal Style Sheet в строке Styling Options. Этот параметр создаст SVG файл в хедере которого будут записаны все стили файла — цвета, контуры и их цвета.

Если в документе нет повторяющихся цветов и прочих стилей, то имеет смысл встроить их непосредственно в объекты. Для этого выбирайте пункт Presentation Attributes. Оба эти способа помогут сделать файл максимально независимым:

  • При передаче — вы будете передавать только 1 файл, что не позволит вам случайно забыть файл стилей и запутаться в файлах.
  • При внедрения файла в страницу — файл всегда будет использовать встроенные стили и будет производится только один запрос к серверу — не будет лишних запросов при загрузке файла.

Я выбрал для себя последний способ — External CSS. Этот параметр позволит сохранить стили в отдельный файл. Для чего оно мне и для чего вообще это может потребоваться? Ну у меня появилось желание сделать логотип сайта графикой SVG и при этом менять цвета логотипа при смене дизайна сайта непосредственно из общих стилей или из JS скрипта. Захотел — картинка красная, передумал и сделал её синей. При этом чтобы это «хотение» было не моё, а пользователя. В общем более подробно я уже писал в статье «Скрипт смены стиля пользователем в WP и не только…«

Параметр External CSS позволит сохранить стили в отдельный файл. К сожалению, я так и не смог добиться раскрашивания SVG файла с помощью глобальных стилей документа. Но это с одной стороны понятно, а с другой очень огорчает, т.к. SVG файл встраивается в DOM страницы, но и в тоже время не воспринимает глобальные стили, тем самым лишая многих возможностей по оформлению интерфейса и не только. Хотя с помощью JS управлять файлом всё равно можно. Об этом я расскажу в следующей статье. Так что данный параметр полезен разве только для презентаций, когда у нескольких файлов очень много общих стилей.

Если Вы не поняли что я написал в последних трёх четырёх абзаца — поэкспериментируйте сами с этим параметром и Вы всё сами поймете. SVG файл можно легко открыть в блокноте и посмотреть или отредактировать код. Это же обычный XML файл.

JavaScript

Следующий немаловажный пункт (checkbox) — это прикрепление или внедрение JS. Тут всего два параметра «выносить js код в отдельный файл» или «внедрить его в документ». По умолчанию он внедряется в код файла, т.е. галочка снята. Но т.к. в примере я не используем ни каких JS, то этот пункт мне не особо интересен.

Document Setup

Далее идут настройки документа — Document Setup.
Ну про ширину и высоту думаю рассказывать не имеет смысла. Тут и так всё понятно. Главное не забудьте выставить единицу измерения pixsels

А вот Drawing Precision очень полезная штука. Тут мы задаем масштаб в котором будет обрабатываться документ, главным образом координаты узлов и объектов. В этом параметре я всегда выставляю разное значение. Вы можете поиграться и выставить свои. Но желательно добиться что бы у вас координаты были типа 12.435567 или 213.078381, т.е. 2 или 3 разряда. Зачем? Про это будет рассказано чуть ниже.

Следующий пункт Fourtain Steps оставим по умолчанию.

Export Text

Далее нам предлагается выбрать, как мы желаем сохранить текст — Export Text
В моем примере текста нет, поэтому он меня не касается, но всё же поясню.

Если у Вас в документе есть текст и он использует стандартные системные шрифты, то текст стоит сохранить «как текст» (As Text) со всеми снятыми галочками у этого параметра.

Если же вы используете не стандартные шрифты, то рекомендую сохранить текст в кривых (As Curves). Это позволит избавится от лишних файлов со шрифтами.

Export Bitmap

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

  • Если в файле много фотографий, то следует выбрать формат JPG. Хотя я не представлю зачем в SVG файле может быть использовано много фотографий. Если для галереи или чего то подобного, то это не оправдано, учитывая что сейчас для таких целей существует множество разных галерей на JS и фрейморках.
  • Для остальных целей необходимо использовать PNG или GIF. Хотя такие картинки чаще проще отрисовать. Не спроста же мы решили использовать SVG.
  • Если вы используете много эффектов, которые Corel будет растрировать при сохранение, то стоит выбрать PNG.

Так же выбирайте на своё усмотрение прикреплять файлами картинки или внедрять (Link Images / Embed Images). Если в файле много картинок и все они крупные, то лучше будет прикреплять их файлами. Если в файле несколько картинок или чуть больше чем несколько, но они все маленькие, то лучше внедрить.

Хотелось бы напомнить, что SVG файл легко может редактироваться даже в блокноте. Хотя не рекомендую обычный виндовский блокнот, лучше использовать редактор Notepad++ или аналог в котором используется подсветка кода и который может корректно работать с UTF-8. И если вы прикрепите изображения как файлы, а не внедрите, то их потом лучше сохранить отдельно в соответствующие форматы, используя советы выше — фотки в JPG, а остальные картинки в PNG и GIF и подправить пути до файлов ручками.

Presents

И последний пункт в окне параметров сохранения SVG — это Presents. В этом пункте разработчики CorelDraw создали для нас несколько предустановок настроек, а также предоставили возможность сохранить свои часто используемые настройки.

Оптимизация SVG файла и его сжатие

Не буду изобретать велосипед и рассказывать то, что уже есть в интернете.
На сайте xiper.net есть хороший материал на эту тему: Оптимизация SVG. Компрессия кода.. Там же есть браузерная версия SVG-оптимизатора. Она то нам и понадобится.

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

На момент написания статьи оптимизатор с сайта xiper.net не работал корректно, поэтому необходимо действовать так:

  • Сохраняем SVG файл из Corel’а, но не забудьте настроить масштаб — Drawing Precision. Именно теперь она нам понадобиться и будет играть одну из ключевых ролей.
  • Далее переходим на страницу оптимизатора:
    • В поле «Исходный файл» выбираем созданный нами файл
    • В поле «Точность чисел в атрибуте «d» тега «path»» ставим 0. Это нам позволит оптимизировать файл за счет удаления всех значений после точки. Именно для этого я советовал, выше в статье, отстроить масштаб (Drawing Precision).
    • Поставьте галочку «Форматировать XML», а галочку с «Сжать gzip» снимите, если она стоит. Дело в том, что на момент написания статьи, оптимизатор работал некорректно. Возможно к моменту прочтения статьи оптимизатор уже будет исправлен (я автору сообщил в комментариях к его статьи об ошибках оптимизатора :-)) и тогда можете поставить галочку «Сжать gzip» и пропустить следующий пункт.
  • Жмем «Получить файл» и сохраняем его.
  • Открываем наш файл и удаляем в нём ошибку, которую подарил нам оптимизатор:
    <br />
    <b>Notice</b>: Undefined index: P in <b>/home/clients/ksayri_ftp0/domains/xiper.net/html/php/services/svg-compressor/scripts/svgcrush.php</b> on line <b>251</b><br />
  • Следующим шагом у нас будет уже сжатие (архивирование) файла. Да-да, именно архивирование, т.к. все браузеры которые поддерживают SVG — поддерживают и SVGZ — сжатые SVG с помощью GZip. Только обращаю Ваше внимание, что FireFox пока что не может открывать SVGZ локально!.
    Для это загружаем новый, очищенный от ошибки, файл в эту же форму и ставим только одну галочку напротив «Сжать gzip», и жмем «Получить файл».

На этом всё — файл готов к употреблению. В случае правильно выполненных советов файл может потерять до 90% от своего веса 🙂

UPDATE (02.11.2011)

Я сразу не обратил внимания — оказывается CorelDraw умеет сохранять сразу SVGZ. Я бы всё же не рекомендовал этого делать из-за приведенных мной выше нюансов. Ручками все же надежнее корректировать выходной файл. Но если вам надо быстро вывести файл, например для тестов, то SVGZ в CorelDraw самое то, ни надо ни каких заморочек. Однако файл, повторю, по выше предложенной схеме получается меньшего веса, а иногда и в несколько раз.

UPDATE 2 (02.11.2011)

Как известно — без мозгоёбства ни чего не бывает. В этот раз сюрприз преподнёс FF. Он не захотел отображать корректно SVGZ, а точнее просто ругался и выдавал ошибку

Ошибка синтаксического анализа XML: некорректно
Адрес: http://demo.g63.ru/animation_css3_and_svg/animation.svgz
Строка 1, символ 1:
￿

Поэтому на данный момент рекомендация следующая:

  • Не использовать выше предлагаемый онлайн оптимизатор для сжатия в SVGZ
  • Использовать локальный упаковщик GZIP (GZ). Не путать с ZIP. Например TotalCommander или 7Zip. Только не забыть переименовать расширение файла в SVGZ.
  • Или использовать прямое сохранение из CorelDraw. В InkScape так же есть такая возможность. Однако файл будет немного больше по размеру из-за отсутствия ручной оптимизации.
  • Для надежности создать на сервере файл .htaccess или добавить в него, если этот файл есть, следующие параметры
    AddType image/svg+xml svg svgz
    AddEncoding gzip svgz

UPDATE 3 (26.12.2011)

В FF также появляется выше приведенная ошибка, если в файле нет отбивки после первой строки, объявляющей формат файла.
Т.е. вот так не правильно:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

А вот так правильно:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  1. Андрей # link

    Спасибо за статью! Это мега вещь! Осталось научиться грамотно внедрять svg.

  2. BaNru # link

    На здоровье 🙂
    Хотел написать статью по «внедрению» и «укрощению» еще год назад, но так руки и не дошли.

  3. Ярослав # link

    Добрый день. Подскажите, вы занимаетесь созданием кнопок в svg? Необходимы кнопки для скачивания файлов для нескольких ОС. Спасибо, жду ваш ответ.

  4. BaNru # link

    Добрый!
    Извиняюсь, что не ответил ранее, уведомления почему-то не приходили, после переезда на новый хостинг.

    Сомневаюсь, что ещё актуально.
    Но если вдруг — пишите на почту admin@g63.ru.

Оставить комментарий

В блоге включена ручная модерация комментариев. Нет смысла повторно отправлять комментарий.
Поля отмеченный звездочкой * обязательны к заполнению

Перед отправкой формы: