首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Javascript/jQuery和C#将SVG转换为PNG以供下载

使用Javascript/jQuery和C#将SVG转换为PNG以供下载
EN

Stack Overflow用户
提问于 2018-08-10 10:48:09
回答 1查看 1.5K关注 0票数 1

我在一个页面上有一张svg图片。然后,用户单击一个链接,这将被调用以获取toDataUrl():

代码语言:javascript
复制
            console.log('Processing svg for NOT Internet Explorer');
            var svgText = $("#div-surrounding-svg-element").html();
            var d3Canvas = document.getElementById("d3-canvas");
            d3Canvas.width = 2000;
            d3Canvas.height = 300;
            var ctxt = d3Canvas.getContext("2d");
            // make canvas background
            ctxt.fillStyle = "#fff";
            ctxt.fillRect(0, 0, d3Canvas.width, d3Canvas.height);

            var svg = new Blob([svgText], { type: "image/svg+xml;charset=utf-8" });
            var domURL = self.URL || self.webkitURL || self;
            var url = domURL.createObjectURL(svg);
            var img = new Image();

            img.onload = function ()
            {
                ctxt.drawImage(this, 0, 0);
                domURL.revokeObjectURL(url);
                var dataUrl = d3Canvas.toDataURL();
                // $('#download-chart-dataUrl').val(dataUrl);
                // var downloadExcelForm = $('#download-chart-form');
                // downloadExcelForm.submit();

                // $('#download-chart-form').submit();
                DownloadPNG(dataUrl);
            };

            img.src = url;
        }

DownloadPNG向服务器发送POST,而C#执行以下操作:

代码语言:javascript
复制
        var base64Data = Regex.Match(dataUrl, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
        var binData = Convert.FromBase64String(base64Data);

        using (var stream = new MemoryStream(binData))
        {
            var tempFolder = ConfigurationManager.AppSettings["tempFilesDirectory"];
            var bitmap = new Bitmap(stream);

            var folder = Server.MapPath(tempFolder);
            var imagePath = folder + $"/{Guid.NewGuid().ToString()}.png";
            bitmap.Save(imagePath);

            //return File(imagePath, "image/png", "Chart.png");
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment;filename=Chart.png");
            Response.WriteFile(imagePath);
            Response.End();
        }

我得到了一个纯白色的png,而不是我想要的图像。我遗漏了什么?谢谢。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51778218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档