【问题标题】:export SVG to PNG with image inside SVG使用 SVG 内的图像将 SVG 导出为 PNG
【发布时间】:2013-07-01 13:19:20
【问题描述】:

我正在尝试创建一个网站,您可以在其中使用 Raphael.js 在另一个图像上绘制图像。绘图部分已完成,我可以将线条导出为 png。 我将图像插入到由函数paper.image() 生成的SVG raphael; 不幸的是,我的导出功能不包括导入的图像。

这些是我正在使用的脚本,但我不认为我会全部使用它们。

<script src="../jquery-2.0.1.min.js"></script>
<script src="raphael-min.js"></script>
<script src="rgbcolor.js"></script>
<script src="canvg.js"></script>
<script src="StackBlur.js"></script>
<script src="svg.min.js"></script>

这里是导出函数 $('#save').onmousedown...

var canvas = document.getElementById('canvas2');
var svg = document.getElementById('canvas');
svg = svg.innerHTML;
canvg(canvas, svg);
var img_url = canvas.toDataURL('image/png');
$('#converted_image').attr('src', img_url);
var img = canvas.toDataURL("image/png");
document.write('<img src="'+img+'"/>');

这是我如何通过代表图像$('#img1').onmousedown的按钮导入图像...

paper.clear();
var c = paper.image("images/img1.png", 10, 10, 200, 200);

以下是 dom-tree 中输出的样子,其中以图像和白线为例。

<div id="canvas">
    <svg height="300" version="1.1" width="300" 
         xmlns="http://www.w3.org/2000/svg"
         style="overflow: hidden; position: relative; " id="canvassvg">
        <desc>Created with Raphaël 2.1.0</desc>
        <defs></defs>
        <image x="10" y="10" width="200" height="200"
               preserveAspectRatio="none" href="images/img1.png">
        </image>
        <path style="stroke-linecap: round; stroke-linejoin: round; "
              fill="none" stroke="#ffffff" 
              d="M383,201L383,201L383,202L383,203"
              stroke-linecap="round" stroke-linejoin="round" stroke-width="4">
        </path>
    </svg>
</div>

非常感谢您的任何回复,请原谅我的英语。

【问题讨论】:

  • 如果你添加 jsfiddle 会有帮助

标签: jquery svg export raphael canvg


【解决方案1】:

我已经使用 Batik 成功完成了这项工作,您可以在此处下载:http://xmlgraphics.apache.org/batik/tools/rasterizer.html

一旦您拥有了 SVG,只需将 svg 保存到一个文件并将其传递给 batik,您就完成了!输出一个非常漂亮的 PNG(甚至在远程包含图像时也可以工作)。

【讨论】:

    【解决方案2】:

    你试过 Canvas 的 drawImage() 方法吗?

    此处示例:https://developer.mozilla.org/samples/canvas-tutorial/3_1_canvas_drawimage.html

    【讨论】:

      【解决方案3】:

      here 提出的答案对我有用!

      定义 Raphael 对象后,您应该执行以下操作:

      raphaelObj.attr('xmlns:xlink',"http://www.w3.org/1999/xlink");
      

      【讨论】:

        【解决方案4】:

        我认为它应该有效

        function convertsvg(selectors) {
                  [].forEach.call(document.querySelectorAll(selectors), function (div) {
                    try {
        
                        var sourceImage;
                        var imgs = document.getElementById('svgpng'),
                          svg = div.querySelector('svg'),
                          can = div.querySelector('canvas'),
                          ctx = can.getContext('2d');
                          can.width =500;
                          can.height = 550;
        
                         sourceImage = new Image;
                        sourceImage.width = can.width;
                        sourceImage.height = can.height;
                        sourceImage.onload = function () {
                            ctx.drawImage(sourceImage,80,90);
        
                            imgs.src = can.toDataURL();
                        };
        
                        sourceImage.src = svg ? svgDataURL(svg) :"";
                    } catch (e) { console.log(e) }
                });
            }}
              
        function svgDataURL(svg) {
        
                var svgAsXML = (new XMLSerializer).serializeToString(svg);
                return "data:image/svg+xml," + encodeURIComponent(svgAsXML);
            }
        <div id="forsvgtopng">
                       <div id="svgelemntdiv">
                           <svg id="mySVG" xmlns="http://www.w3.org/2000/svg" version="1.1">
                         <rect width="150" height="150" fill="rgb(0, 255, 0)" stroke-width="1" stroke="rgb(0, 0, 0)"/>
                       </svg>
                    </div>
                   <div class="canvasdiv">
                        <canvas ></canvas>
                   </div>
                <div class="pngdiv">
                     <img id="svgpng" />
                </div>
            </div>

        调用像convertsvg('#forsvgtopng')这样的javascript函数

        【讨论】:

          猜你喜欢
          • 2020-09-27
          • 1970-01-01
          • 1970-01-01
          • 2015-02-26
          • 2011-06-16
          • 2023-04-05
          • 2015-05-03
          • 2019-07-18
          相关资源
          最近更新 更多