У меня есть SVG с грузом текста на нем. Это карта парковки с написанными на ней космическими номерами. Я отображаю это в веб-браузере, и благодаря замечательной небольшой ошибке в Firefox браузер неправильно отображает текст. Бу.
Поэтому я преобразовал текст в пути. Мы говорим о 4000 отдельных ярлыках. Может быть, 15 000 новых фигур теперь являются векторами. Это 4 МБ. Обычно вы можете утверждать, что это поддается сжатию, но я должен встроить этот SVG в HTML . Я добавляю CSS-изменения динамически, и это единственный способ получить поддержку кросс-браузера. Так или иначе, сырой - даже разведанный - вывод этого слишком велик, чтобы быть полезным.
Что меня поражает, так это то, что все эти пробелы имеют общие символы. Ноль через девять. Почему я включаю определение формы для каждого экземпляра каждого числа? Могу ли я их дублировать?
Я использую Inkscape, но я открыт для предложений.
path|simplify
ли вы вообще помочь? Строчные буквы «s» преобразуются в 28-точечный путь, упрощают его до 17 и накладывают на упрощенную и не упрощенную версии даже с увеличением, так что одна «s» заполняет экран, нет никакой разницы.Ответы:
<use>
Элемент позволяет повторно использовать объекты , определенные в другом месте в документе. Например, вы можете определить каждый глиф как,<symbol>
а затем использовать их несколько раз. Вот хорошая статья о нем: структурирование, группирование и реферирование в SVG - The<g>
,<use>
,<defs>
и<symbol>
элементы .Я не знаю, как сделать это непосредственно в Inkscape, тем более, особенно если речь идет о наборе текста, который у вас уже есть. Возможно, вам придется написать скрипт для постобработки SVG и найти все пути, которые можно использовать повторно.
источник
<use>
Было то , что я думал , когда я спросил это, скриптовый как. Кажется глупым, что нет ничего, что могло бы дублировать почти идентичную разметку.<symbol>
s (или, похоже, вы могли бы использовать<def>
глифы текста к путиЕсть несколько доступных вариантов сжатия, которые будут предлагать различные степени успеха. Чтобы проверить их, я создал графический файл, в котором было много повторяющегося текста. Нерасширенный, размер файла составляет 13,8 КБ. В развернутом виде размер файла составляет 1,42 МБ .
Хороший вариант: используйте SVGZ - 46,5 КБ
Сохранение расширенной иллюстрации в формате SVGZ дало мне выходной файл размером 46,5 КБ, который значительно меньше стандартного SVG. Обратите внимание, что эта поддержка может отличаться .
Лучший вариант: компресс с Scour - 21,1 КБ
Scour - это инструмент, который очистит и оптимизирует ваш SVG-файл для вас. С помощью команды «максимальное сжатие»
scour -i input.svg -o output.svgz --enable-viewboxing --enable-id-stripping --enable-comment-stripping --shorten-ids --indent=none
расширенная обложка была уменьшена до 21,1 КБ. Недалеко от оригинального нераскрытого размера файла!источник
scour
не сжимается. Он также может перебросить файл через gzip, но основное внимание уделяется минимизации идентификаторов и пробелов.Это решение в браузере или на сервере
Существует много разных способов оптимизации файлов SVG. Похоже, вы уже сделали немало.
Несколько ресурсов, которые я нахожу очень полезными, - это статья css-tricks , посвященная очень конкретным деталям. И конкретно, инструмент, который использует SVGO .
Если у вас много повторяющихся путей, я бы подумал об использовании javascript для динамического создания фигур. Существует пример здесь . Одним из направлений было бы иметь определенную функцию для каждого глифа и просто иметь каждый путь в элементе svg, созданный запросом для этой функции. Или возьмите полную строку и / или массив аргументов, чтобы создать свой встроенный svg. Это, конечно, предполагает, что ваши пути длиннее, чем длина кода, необходимого для запроса указанной функции (довольно простое предположение).
источник
<use xlink:href="#digit_one">
гдеdigit_one
путь"Здесь на очень высоком уровне то, что должен делать ваш скрипт. Не стесняйтесь использовать предпочитаемый вами язык и среду, это всего лишь отправная точка для логики, которая должна дать вам то, что вы ищете.
<defs>
раздел, определяющий информацию о пути для каждой цифры.<g>
парковочные места и замените их<use xlink:href="#digit" x=x y=y />
Я могу предвидеть некоторые осложнения, с которыми вам придется иметь дело, и удачи с ними.
Надеюсь это поможет. Удачи.
источник