Запазете svg (в div) в png или конвертирайте в png. Рафаел JS

Нов съм в Raphaël и javascript и имам въпрос как да запазя svg (в div) в png с помощта на Javascript. Прочетох май статии: като например използване на canvg https://code.google.com/p/canvg/ и canvas.toDataURL('image/png'); ..и т.н., но все още не знам как да го направя.

Опитвам се да конвертирам изхода на qrcodesvg.js (http://vp-dev.net/qrcodesvg/) към някои формати за изтегляне/четене на png/изображения от страната на клиента. Може ли някой да ми даде някои съвети кои или какви основни препратки да разгледам? Благодаря!

Поздрави,


person Kristina Chappell    schedule 12.04.2013    source източник
comment
възможен дубликат на Конвертиране на SVG в изображение (JPEG, PNG, и т.н.) в браузъра   -  person Robert Longson    schedule 13.04.2013
comment
Благодаря ти, Робърт. Но прочетох тази статия, преди да публикувам тази (не мога да публикувам повече от 2 връзки). Добре, и откривам скрития Html SVG таг с помощта на Opera Dragonfly: <div id="qrcode"> <svg height="250" version="1.1" width="250" xmlns="http://www.w3.org/2000/svg" style="overflow:hidden;position:relative"> Забелязвам, че SVG е вложен под qrcode div и това е основният проблем, че не мога да извлека SVG с id qrcode!   -  person Kristina Chappell    schedule 13.04.2013
comment
Добре, ето актуализацията: просто използвайте getElementsByTagName document.getElementsByTagName('svg')[0].id = 'id_something'; и задайте svg тага с id нещо, след което с помощта на canvg(canvas, svg); и var img_url = canvas.toDataURL('image/png'); ще получите png файла, който искате. Правилно ли постъпвам? Благодаря,   -  person Kristina Chappell    schedule 13.04.2013


Отговори (1)


Преди няколко дни имах същия проблем. В действителност имах нужда да конвертирам svg, съдържащ изображения: в този случай трябва да експортираме ръчно всяко изображение в Base64. Фрагментът по-долу обаче трябва да работи и във вашия случай. Използвах Raphael.Export библиотека, за да получа SVG.

var svgData = r.paper.toSVG(), //Obtaining the SVG element
              parser = new DOMParser(),
              //converting the svg in a DOM object
              doc = parser.parseFromString(svgData, "text/xml");

//Getting all the images element in the SVG
var images = doc.querySelectorAll( "image" );
var canvas = document.createElement('canvas');

var ctx = canvas.getContext( "2d" );

var i, imgArr = new Array();
for(i=0; i<images.length; i++){
    //for each image element, i need to obtain its Base64 representation
    imgArr[i] = document.createElement("img");
    imgArr[i].setAttribute( "src", images[i].href.baseVal);

    imgArr[i].onload = function(i, images){
        return function() {
            ctx.drawImage( imgArr[i], 0, 0 );
            // Replace the image href with its base64 representation
            svgData = svgData.replace(images[i].href.baseVal,canvas.toDataURL( "image/png" ));
            //if i'm converting the last element, create the img result
            if(i==images.length-1){
                 var img = document.createElement('img'), canv = document.getElementById('myCanvas');
                     //generating the result svg image
                     img.setAttribute( "src", "data:image/svg+xml;base64," + btoa(svgData));
                     var context= canv.getContext( "2d" );

                     //when the img ready, we can obtain the png 
                     img.onload = function() {
                            context.drawImage( img, 0, 0 );
                            var canvasdata = canv.toDataURL("image/png");
                            var pngimg =  document.getElementById( "myImg" ); 
                            pngimg.setAttribute( "src", canvasdata);
                            //now pngimg contains the resulting image
                     };
            }
        }   
    }(i, images);
}

И във вашия html документ ви трябва img таг с id="myImg"

Надявам се, че може да помогне :)

person giacomolm    schedule 25.04.2014