Я хочу динамически создать SVG, который я могу использовать в <img/>
тег. Это само по себе легко; создать SVG, установить заголовок и повторить сгенерированные части в их правильном месте.
Проблема в том, что я хочу иметь возможность вставлять шрифты в SVG.
Я пытался использовать @font-face
правило в CSS svg, но это не сработало (MDN говорит, что это работает только на Android и Safari).
Есть ли кросс-браузерный способ сделать это?
В моем главном файле создайте файл SVG, который использует @font-face
Правило CSS, а затем использовать exec()
использовать Inkscape для преобразования этого SVG в другой SVG, который преобразует все буквы в пути. Я тогда мог бы использовать echo file_get_contents($inkscape_file)
с правильными заголовками, чтобы вывести его как SVG, который может быть использован с <img/>
тег.
Это создает 2 дополнительных файла, поэтому кажется очень неэффективным. Кроме того, поскольку каждый пользователь в конечном итоге генерирует несколько изображений, занимаемое им пространство будет расти феноменально.
Создайте шаблон в Illustrator, затем сохраните его как svg и отметьте опцию «Вставить все глифы». Затем замените текст & стили с опциями из скрипта PHP. Используйте правильный заголовок и выведите это.
Это серьезно ограничивает количество шрифтов, которые можно использовать, поскольку оно ограничено только теми, для которых я создаю шаблон. Мое желаемое поведение состояло в том, чтобы добавить возможность пользователям загружать свои собственные шрифты и использовать их. Это решение не позволяет этого.
@font-face
Правило, которое я сейчас использую, таково:
@font-face {
font-family: Potato;
src: url("/fonts/potato.otf");
}
Вы не можете загружать внешние ресурсы, объявленные в svg, из <img>
тег.
Единственным решением было бы несколько дурацких способов добавить глифы или шрифты в сам файл svg.
На самом деле есть не такой дерьмовый способ сделать это, как вы нашел в этот ответ от оскорблении величества.
Лучший способ это затем все еще ИМО не использовать <img>
тег для отображения документов SVG, но лучше использовать <iframe>
или <object>
тег с @font-face
объявлен внутри файла SVG, или даже непосредственно включить встроенную версию в документ. Эти методы позволяют загружать внешние ресурсы, такие как шрифты.
Тогда вам просто нужно сохранить шрифты на вашем сервере или просто URL-адрес шрифта в @font-face
декларация.
Других решений пока нет …