У меня возникли проблемы с выяснением того, почему два разных svg заставляют мой javascript работать в одном экземпляре, но не в другом. Я только поменял элементы svg в обоих примерах, один работает, а другой нет. Вот код в двух jsFiddles. Рабочий пример я получил от here.svg to png не работает, подозрительные svg отличия элементов
В конечном счете, моя цель - сохранить текущий элемент svg плана этажа и вставить преобразованный png как встроенный img в область с расширенным текстом. Как будто вы сняли снимок экрана плана пола и вложили его в область с богатым текстом, как вы видите на сайтах службы поддержки. У меня просто проблемы с преобразованием в png.
Рабочая: JsFiddle
не работает: JsFiddle
Вот это JS, я не могу добавить код SVG или это поставит меня предел символьного Stackoverflow.
var svgString = new XMLSerializer().serializeToString(document.querySelector('#svg2'));
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
var svg = new Blob([svgString], {
type: "image/svg+xml;charset=utf-8"
});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 0, 0);
var png = canvas.toDataURL("image/png");
document.querySelector('#png-container').innerHTML = '<img src="' + png + '"/>';
DOMURL.revokeObjectURL(png);
};
img.src = url;
Edit:
С тех пор я остановился на этом коде опуская преобразования PNG/холст, и пытается поместить последовательную строку в формате SVG, непосредственно богатому текстовой области, но он получает сообщение об ошибке в IE, декларации пространства имен, отличные от по умолчанию, не должны иметь пустой URI. Линия: 1, column142
var svgString = new XMLSerializer().serializeToString(document.querySelector('#svg2'));
var img = new Image();
var url = "data:image/svg+xml; charset=utf8, "+encodeURIComponent(svgString);
img.onload = function() {
document.querySelector('.ze_body').innerHTML = '<img src="'+url+'"/>';
};
img.src = url;
Также я думаю, что это поможет, если я показал более структуру, как в настоящее время находится эта богатая текстовая области. Это не наше дело, его продукт, который мы используем, и я просто пытаюсь получить карты для вставки в область описания, чтобы он мог жить с билетом. Только доступ у нас есть js, вызванный правилами в форме. Screenshot of ze_body element as it stands in the DOM
Большое спасибо, я вижу, что люди все время чистят пространство имен в видеороликах, но я сделал эти svg с помощью inkscape и даже экономя их Оптимизированный, он по-прежнему оставляет много очистки. Я больше читаю, чтобы выглядеть, спасибо, еще раз. – Dogbyte
У вас есть идея, почему ваш Jsfiddle не будет работать в IE? Я первоначально пробовал это в Chrome, но мне нужно это, чтобы работать и в IE 11. Я не могу получить какие-либо ошибки в консоли, но png img определенно не печатает на экране. – Dogbyte
Да, IE очень ограничен для этой задачи. По-видимому, это не поддерживает объявление какого-либо пространства имен ... Если вы удалите их все, вы сможете рисовать на холст: http://jsfiddle.net/jdh0y4c2/9/. Но тогда это испортит полотно, что сделает невозможным доставку своих данных «dataURL» или «imageData» (по-видимому, IE dev считает, что svg может включать скрипты, поэтому canvas CORS должен применяться к любому svg-изображению, нарисованному в холст.Я не знаю обходных решений, кроме тех, которые просят пользователя IE щелкнуть правой кнопкой мыши по svg или холсту, «сохранить изображение как ...», но это не будет полезно в вашем случае ... – Kaiido