Я работаю над веб-проектом, который включает в себя динамически сгенерированную карту США, раскрашивающую разные штаты на основе набора данных.
Этот файл SVG дает мне хорошую пустую карту США, и в нем очень легко изменить цвет каждого штата. Сложность состоит в том, что браузеры IE не поддерживают SVG, поэтому, чтобы использовать удобный синтаксис, который предлагает svg, мне нужно преобразовать его в JPG.
В идеале я бы хотел сделать это только с библиотекой GD2, но также мог бы использовать ImageMagick. Я понятия не имею, как это сделать.
Будет рассмотрено любое решение, которое позволит мне динамически изменять цвета штатов на карте США. Ключ в том, что цвета легко менять на лету и кроссбраузерность. Только решения PHP / Apache, пожалуйста.
Ответы:
Забавно, что вы спросили об этом, я только что сделал это недавно для своего рабочего сайта и подумал, что должен написать учебник ... Вот как это сделать с PHP / Imagick, который использует ImageMagick:
Шаги по замене цвета регулярного выражения могут отличаться в зависимости от xml-пути svg и того, как хранятся значения идентификатора и цвета. Если вы не хотите хранить файл на сервере, вы можете вывести изображение в виде базы 64, например
(прежде чем использовать clear / destroy), но, например, есть проблемы с PNG как base64, поэтому вам, вероятно, придется выводить base64 как jpeg
вы можете увидеть здесь пример, который я сделал для карты территории продаж бывшего работодателя:
Начало: https://upload.wikimedia.org/wikipedia/commons/1/1a/Blank_US_Map_(states_only).svg
Финиш:
редактировать
С момента написания вышеизложенного я придумал 2 улучшенных метода:
1) вместо цикла регулярных выражений для изменения состояния заливки используйте CSS для создания таких правил стиля, как
а затем вы можете сделать одну замену текста, чтобы вставить свои правила css в svg, прежде чем приступить к созданию imagick jpeg / png. Если цвета не меняются, убедитесь, что у вас нет встроенных стилей заливки в тегах пути, переопределяющих CSS.
2) Если вам не нужно создавать файл изображения jpeg / png (и не нужно поддерживать устаревшие браузеры), вы можете управлять svg напрямую с помощью jQuery. Вы не можете получить доступ к путям svg при встраивании svg с использованием тегов img или object, поэтому вам придется напрямую включить svg xml в html своей веб-страницы, например:
тогда изменить цвета так же просто, как:
источник
$dom = new DOMDocument(); $dom->loadXML( $svg ); $dom->getElementsByTagName('image')->item(0)->setAttribute('id', $state); $svg = $dom->saveXML();
Вы упомянули, что делаете это, потому что IE не поддерживает SVG.
Хорошая новость заключается в том, что IE делает поддержку векторной графики. Хорошо, это в форме языка VML, который поддерживает только IE, а не SVG, но он есть, и вы можете его использовать.
Карты Google, среди прочего, обнаружат возможности браузера, чтобы определить, использовать ли SVG или VML.
Тогда есть библиотека Рафаэля , которая представляет собой графическую библиотеку на основе браузера Javascript, которая поддерживает SVG или VML, опять же, в зависимости от браузера.
Еще один, который может помочь: SVGWeb .
Все это означает, что вы можете поддерживать своих пользователей IE, не прибегая к растровой графике.
См. Также главный ответ на этот вопрос, например: XSL Transform SVG to VML
источник
При преобразовании SVG в прозрачный PNG не забудьте поставить это ДО
$imagick->readImageBlob()
:источник
Это очень просто, мы работали над этим последние несколько недель.
Вам понадобится Batik SVG Toolkit . Загрузите и поместите файлы в тот же каталог, что и SVG, который вы хотите преобразовать в JPEG , также убедитесь, что вы сначала распаковали его.
Откройте терминал и запустите эту команду:
Это должно вывести JPEG файла SVG. Действительно просто. Вы даже можете просто поместить его в цикл и конвертировать множество SVG,
источник
Я не знаю отдельного решения PHP / Apache, так как для этого потребуется библиотека PHP, которая может читать и отображать изображения SVG. Я не уверен, что такая библиотека существует - не знаю.
ImageMagick может растрировать файлы SVG либо через командную строку, либо через привязку PHP, IMagick , но, похоже, имеет ряд особенностей и внешних зависимостей, как показано, например, в этой ветке форума . Я думаю, что это все еще самый многообещающий путь, это первое, на что я бы обратил внимание на вашем месте.
источник
Это метод преобразования изображения svg в gif с использованием стандартных инструментов php GD.
1) Вы помещаете изображение в элемент холста в браузере:
Затем преобразуйте его на сервере (ProcessPicture.php) из (по умолчанию) png в gif и сохраните. (вы также можете сохранить как png, тогда используйте imagepng вместо изображения gif):
источник
Вы можете использовать Raphaël - библиотеку JavaScript и легко добиться этого. Это будет работать и в IE.
источник
или используя: potrace demo: Tool4dev.com
источник