Компресія SVG коду

  1. Оптимізація SVG-коду
  2. архівування SVG
  3. Автоматизація оптимізації

Автор: Євген Рижков Дата публікації: 08.09.2010

Одна з переваг SVG-файлів - це відмінні можливості компресії Одна з переваг SVG-файлів - це відмінні можливості компресії. Для більшої ефективності її слід проводити в два етапи: оптимізація коду і архівування.

Оптимізація SVG-коду

Мета даного етапу - по максимуму скоротити код: чим менше коду, тим файл легше. Домогтися цього можна дотримуючись рекомендацій:

  • скорочуємо кількість окремих вузлів по максимуму:
    • використовуємо криві Безьє, еліпси, дуги і т.д. для створення плавних кривих ліній, замість безлічі коротких відрізків прямих ліній (polyline);
    • текст робимо текстом замість того щоб його малювати складними лініями;
  • застосовуємо відносні координати замість абсолютних (при цьому читання коду людиною ускладнюється);
  • використовуємо можливості SVG (градієнти, фільтри) для створення різних ефектів - мінімум графічних даних для отримання результату;
  • SVG дозволяє багаторазово використовувати один і той же елемент в ілюстрації;
  • SVG підтримує CSS успадкування та угруповання. Використовуй це;
  • скорочуй точність даних: для нормального відображення досить 2-3 знаків після коми;
  • скорочення квітів (наприклад, #FFFFFF = #FFF);
  • зменшуємо деталізацію всюди, де це можливо без видимих ​​втрат якості зображення;
  • видаляємо (або спрощуємо) невидимі елементи (наприклад, ті, які щось перекриває);
  • використовуємо можливості тега path для більш компактного запису: відносні координати, h і v для вертикальних і горизонтальних ліній, s і t для завдання квадратичних і кубічних кривих Безьє.

архівування SVG

SVG файл - це звичайний текстовий файл, який добре піддається архівування. Одним з кращих способів для цього зараз є gzip-стиснення. Стислі файли можуть важити в 2-5 разів менше, ніж стиснені.

W3C: приклади компресії SVG-файлів незжатими SVG файл З gzip стиснення Ступінь стиснення 12,912 2,463 81% 12,164 2,553 79% 11,613 2,617 77% 18,689 4,077 78% 13,024 2,041 84%

Стиснутий SVG-файл отримує розширення SVGZ.

Автоматизація оптимізації

Навіть при досить простих зображеннях, ручна оптимізація може зажадати годинник. З цим не погоджувався Євген Степанищев (bolk) , Який взяв за основу ідеї Jos Hirth і зробив php-скрипт, для оптимізації SVG-файлів з таким функціоналом оптимізації:

  • видалення пробільних символів, символів перекладу рядків і коментарів, заміна порожніх парних відкривають і закривають тегів на їх короткий еквівалент;
  • видалення атрибутів, тегів і просторів імен редактора Inkscape (які не використовуються браузером);
  • зниження точності значень атрибута d тега path. Так само видаляються прогалини, де це допустимо;
  • видаляються теги path з порожнім атрибутом d;
  • оптимізація атрибута стилів ( "style"), видаляються зайві прогалини, видаляються властивості, значення яких дорівнюють їх значення за замовчуванням і видаляються властивості, що відносяться до "fill" і "stroke", якщо задані стилі, що скасовують дію цих властивостей. Значення кольору, якщо це можливо, приводяться до більш компактній формі;
  • скорочення чисел в атрибутах - урізаються незначущі нулі справа, в чисто числових атрибутах видаляється нуль зліва, до точки ( "0.05000" стає ".05");
  • видалення невикористовуваних атрибутів id. Якщо в ілюстрації є теги <script> або <style>, то цей крок пропускається.

Програма працює з командного рядка. Синтаксис запуску і доступні ключі описані в кінці коду самого скрипта.

Нам здалося незручним використання командного рядка, тому зробили браузерную версію SVG-оптимізатора .

Крім перерахованих вище можливостей додали можливість gzip стиснення.

матеріали