2016-04-04 11 views
0

SVG öğelerini div'larla bir görüntüde nasıl oluşturulacağını bilmek istiyorum.SVG öğelerini ve Div'leri bir görüntüye nasıl alabilirsiniz, böylece kullanıcı indirebilirsiniz?

Örnek:

<div class="objects ui-droppable ui-sortable"> 
     <div class="b_s _jsPlumb_endpoint_anchor _jsPlumb_connected" id="start_block">START</div> 

     <div class="b_1 block ui-draggable ui-draggable-handle _jsPlumb_endpoint_anchor _jsPlumb_connected" id="n_block4" title="test"><span>test</span></div> 

     <div class="b_s _jsPlumb_endpoint_anchor _jsPlumb_connected" id="end_block">STOP</div><div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 530px; top: 52px; background: transparent;"></div> 

     <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 529.5px; top: 82px; background: transparent;"></div> 

     <svg style="position:absolute;left:519.5px;top:48px" width="20" height="38" pointer-events="none" position="absolute" version="1.1" xmlns="http://www.w3.org/1999/xhtml" class="_jsPlumb_connector"><path d="M 0.5 -1 L 0.5 31 M 1.5 30 L -0.75 30 M 0.25 31 L 0.25 -1 M 1.25 0 L -1 0 M 0 0 L 0 30 " transform="translate(9.999999999999998,4)" pointer-events="visibleStroke" version="1.1" xmlns="http://www.w3.org/1999/xhtml" fill="none" stroke="rgb(7,152,216)" style="" stroke-width="2"></path><path pointer-events="all" version="1.1" xmlns="http://www.w3.org/1999/xhtml" d="M4.684274006738627e-16,32.650000000000006 L10.000000000000002,7.650000000000007 L1.4221210955098638e-15,17.075000000000006 L-9.999999999999998,7.650000000000005 L4.684274006738627e-16,32.650000000000006" class="" stroke="rgb(7,152,216)" fill="rgb(7,152,216)" transform="translate(9.999999999999998,4)"></path></svg> 

     <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 529.5px; top: 126px; background: transparent;"></div> 

     <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 530px; top: 156px; background: transparent;"></div> 

     <svg style="position:absolute;left:520px;top:122px" width="20" height="38" pointer-events="none" position="absolute" version="1.1" xmlns="http://www.w3.org/1999/xhtml" class="_jsPlumb_connector"><path d="M 0 -1 L 0 31 M -1 30 L 1.25 30 M 0.25 31 L 0.25 -1 M -0.75 0 L 1.5 0 M 0.5 0 L 0.5 30 " transform="translate(9.499999999999998,4)" pointer-events="visibleStroke" version="1.1" xmlns="http://www.w3.org/1999/xhtml" fill="none" stroke="rgb(7,152,216)" style="" stroke-width="2"></path><path pointer-events="all" version="1.1" xmlns="http://www.w3.org/1999/xhtml" d="M0.5000000000000004,32.650000000000006 L10.500000000000002,7.650000000000007 L0.5000000000000014,17.075000000000006 L-9.499999999999998,7.650000000000005 L0.5000000000000004,32.650000000000006" class="" stroke="rgb(7,152,216)" fill="rgb(7,152,216)" transform="translate(9.499999999999998,4)"></path></svg> 
</div> 

Güncel JS kodu: Yukarıdaki kod ile

$("#btnExp").click(function(){ 
      canvg(); 
      html2canvas($(".objects"), { 
       onrendered: function(canvas) { 
        theCanvas = canvas; 
        document.body.appendChild(canvas); 

        // Convert and download as image 
        Canvas2Image.saveAsPNG(canvas); 
        $("body").append(canvas); 

        } 
       }); 

     }); 

, her eleman hale alır, ancak resim doğru değil. How elements get rendered, how they should render.

cevap

0

En çok ümit vaat eden yöntem DOM'ın bir bölümünü bir tuvale koyuyor. Bu tuval, resim olarak görüntülenebilir ve kullanıcılar tarafından indirilebilir. Ya da tuvali blob olarak kaydedebilirsiniz, ancak tüm tarayıcılar bunu desteklemez, bu nedenle ek kütüphaneler kullanılabilir. fazla bilgi: Ne yapabilirsiniz

https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Drawing_DOM_objects_into_a_canvas

https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob

+0

Demo yapmayı dener misiniz? – zidrrr

0

bir tuvale üst div kaydetmek ardından resimle ve js

<div id = "widget" class="objects ui-droppable ui-sortable"> 
    <div class="b_s _jsPlumb_endpoint_anchor _jsPlumb_connected" id="start_block">START</div> 

    <div class="b_1 block ui-draggable ui-draggable-handle _jsPlumb_endpoint_anchor _jsPlumb_connected" id="n_block4" title="test"><span>test</span></div> 

    <div class="b_s _jsPlumb_endpoint_anchor _jsPlumb_connected" id="end_block">STOP</div><div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 530px; top: 52px; background: transparent;"></div> 

    <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 529.5px; top: 82px; background: transparent;"></div> 

    <svg style="position:absolute;left:519.5px;top:48px" width="20" height="38" pointer-events="none" position="absolute" version="1.1" xmlns="http://www.w3.org/1999/xhtml" class="_jsPlumb_connector"><path d="M 0.5 -1 L 0.5 31 M 1.5 30 L -0.75 30 M 0.25 31 L 0.25 -1 M 1.25 0 L -1 0 M 0 0 L 0 30 " transform="translate(9.999999999999998,4)" pointer-events="visibleStroke" version="1.1" xmlns="http://www.w3.org/1999/xhtml" fill="none" stroke="rgb(7,152,216)" style="" stroke-width="2"></path><path pointer-events="all" version="1.1" xmlns="http://www.w3.org/1999/xhtml" d="M4.684274006738627e-16,32.650000000000006 L10.000000000000002,7.650000000000007 L1.4221210955098638e-15,17.075000000000006 L-9.999999999999998,7.650000000000005 L4.684274006738627e-16,32.650000000000006" class="" stroke="rgb(7,152,216)" fill="rgb(7,152,216)" transform="translate(9.999999999999998,4)"></path></svg> 

    <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 529.5px; top: 126px; background: transparent;"></div> 

    <div class="_jsPlumb_endpoint _jsPlumb_endpoint_anchor jsplumb-draggable jsplumb-droppable" style="display: block; width: 10px; height: 0px; position: absolute; left: 530px; top: 156px; background: transparent;"></div> 

    <svg style="position:absolute;left:520px;top:122px" width="20" height="38" pointer-events="none" position="absolute" version="1.1" xmlns="http://www.w3.org/1999/xhtml" class="_jsPlumb_connector"><path d="M 0 -1 L 0 31 M -1 30 L 1.25 30 M 0.25 31 L 0.25 -1 M -0.75 0 L 1.5 0 M 0.5 0 L 0.5 30 " transform="translate(9.499999999999998,4)" pointer-events="visibleStroke" version="1.1" xmlns="http://www.w3.org/1999/xhtml" fill="none" stroke="rgb(7,152,216)" style="" stroke-width="2"></path><path pointer-events="all" version="1.1" xmlns="http://www.w3.org/1999/xhtml" d="M0.5000000000000004,32.650000000000006 L10.500000000000002,7.650000000000007 L0.5000000000000014,17.075000000000006 L-9.499999999999998,7.650000000000005 L0.5000000000000004,32.650000000000006" class="" stroke="rgb(7,152,216)" fill="rgb(7,152,216)" transform="translate(9.499999999999998,4)"></path></svg> 
</div> 
<br/> 
<input type="button" id="btnSave" value="Save PNG"/> 

<div id="img-out"></div> 

js kullanarak indirebilirsiniz geçerli:

$(function() { 
$("#btnSave").click(function() { 
    html2canvas($("#widget"), { 
     onrendered: function(canvas) { 
      theCanvas = canvas; 
      document.body.appendChild(canvas); 

      // Convert and download as image 
      Canvas2Image.saveAsPNG(canvas); 
      $("#img-out").append(canvas); 


      } 
     }); 
    }); 
}); 

, jquery'ye bağımlıdır, html2canvas.js, base64.js, canvas2image.js

Bunun sizin için çalışacağını düşünüyorum.

+0

SVG öğelerini işlemek istemiyor. Neye benziyor: [screenshot1] (http://puu.sh/o5IyB/f00a6a6356.png) Neye benzemesi gerektiği: [ekran görüntüsü2] (http://puu.sh/o5IB7/e21655e913.png) Okları görmediğiniz gibi:/ Aldığım hata: ** Yakalanmadı (sözde) DOMException: 'HTMLCanvasElement' üzerinde 'toDataURL' yürütülemedi: Renkli tuvaller dışa aktarılamayabilir. ** – zidrrr

+0

yapabilecekleriniz, önce tüm svg'yi canvg kütüphanesini kullanarak tuvale dönüştürecek ve svg'nin dönüştürdüğü yukarıdaki kod, herhangi bir sorunla birlikte çalışacaktır. İki adımlı bir işlem olacaktır. – jzaa

+0

Kod çalışıyor ... ama çalışmasını istediğim gibi çalışmıyor. Bu gibi işler: [link] (http://puu.sh/o62p2/915eaf9e90.png) – zidrrr

İlgili konular