конвертировать SVG в холст со встроенным изображением - PullRequest
0 голосов
/ 04 мая 2020

Я создаю элемент svg, который я хотел бы загрузить на свой компьютер. Когда я пытаюсь сделать это как есть, загрузка, которую я получаю, всегда пуста. Я думаю, что это как-то связано с последними несколькими строками, но я не уверен, в чем проблема.
В качестве руководства я использовал следующий ответ StackOverflow: Рисование файла SVG на холсте HTML5

, а также этот рабочий jsfiddle: https://jsfiddle.net/pcLrydh5/

Когда я запускаю скрипт, это пример моих данных base64:

data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxpbWFnZSBocmVmPSJodHRwczovL2kuaW1nZmxpcC5jb20vMXVyOWIwLmpwZyI+PC9pbWFnZT48dGV4dCBpZD0iTWVtZUJveDAiIHk9IjIwIiB4PSIyMCIgZm9udC1zaXplPSIwIj5tZW1lIHRleHQwPC90ZXh0Pjx0ZXh0IGlkPSJNZW1lQm94MSIgeT0iMTE0IiB4PSI2OCIgZm9udC1zaXplPSIyOSIgZmlsbD0ieWVsbG93Ij5tZW1lIHRleHQxPC90ZXh0Pjx0ZXh0IGlkPSJNZW1lQm94MiIgeT0iMjAiIHg9IjIwIiBmb250LXNpemU9IjMyIiBmaWxsPSJibHVlIj5tZW1lIHRleHQyPC90ZXh0Pjwvc3ZnPg==

пример моего вывода svg XML:

<svg xmlns="http://www.w3.org/2000/svg"><image href="https://i.imgflip.com/1ur9b0.jpg"></image><text id="MemeBox0" y="20" x="20" font-size="26" fill="blue">meme text0</text><text id="MemeBox1" y="69" x="83" font-size="28">meme text1</text><text id="MemeBox2" y="189" x="158" font-size="31" fill="green">meme text2</text></svg>

код, который запускает все. Это срабатывает, когда я щелкаю метку привязки:

const CreateCanvas = (event,Svg)=>{
    const svg = document.querySelector('svg');
    const img = document.createElement('img');
    img.style.width = svg.style.width;
    img.style.height = svg.style.height;

    const canvas = document.querySelector('canvas');
    console.log(img);
    //const xml = new XMLSerializer().serializeToString(svg);
    const xml = svg.outerHTML;
    console.log(xml);
    const svg64 = window.btoa(xml);
    const b64Start = 'data:image/svg+xml;base64,';
    const image64 = b64Start + svg64;
    img.src = image64;
    console.log(canvas);
    canvas.getContext('2d').drawImage(img,0,0);
    var dt = canvas.toDataURL('image/png'); // << this fails in IE/Edge...
    window.open(dt);
  dt = dt.replace(/^data:image\/[^;]*/, 'data:application/octet-stream');
  dt = dt.replace(/^data:application\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=Canvas.png');
  // console.log(dt);
  // console.log(event.currentTarget.href);
  event.currentTarget.href = dt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...