C# 如何在c语言中将画布光栅图像数据转换为SVG或EPS文件#

C# 如何在c语言中将画布光栅图像数据转换为SVG或EPS文件#,c#,canvas,svg,eps,C#,Canvas,Svg,Eps,我有html5画布图像数据,希望在服务器上另存为矢量图像(esp或svg)。我曾尝试使用Magick.NET和SVG渲染引擎库,但找不到任何方法将此图像数据转换为矢量图像格式。你可以为此共享代码吗。这是我的密码 public static string UploadImage(string imageData, string userEmail, int quantity) { string completePath = @"~\user-images\file.svg"; by

我有html5画布图像数据,希望在服务器上另存为矢量图像(esp或svg)。我曾尝试使用Magick.NET和SVG渲染引擎库,但找不到任何方法将此图像数据转换为矢量图像格式。你可以为此共享代码吗。这是我的密码

public static string UploadImage(string imageData, string userEmail, int quantity)
{
    string completePath = @"~\user-images\file.svg";
    byte[] byteArray = Convert.FromBase64String(imageData);

    //How can i convert this byteArray into vector image array so that i can save it as vector image on spcified path?

    using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(completePath), FileMode.Create))
    {

        using (BinaryWriter bw = new BinaryWriter(fs))
        {

            byte[] data = Convert.FromBase64String(imageData);

            bw.Write(data);

            bw.Close();
        }

    }

}
编辑:我从某人那里了解到,一旦生成光栅图像数据,它就无法转换为矢量图像。所以问题是,在不获取光栅图像数据的情况下,如何将html画布保存为服务器上的矢量图像

所以现在我尝试使用fabric库通过使用.toSVG()fabric方法生成SVG图像。以下是代码:

var fCanvas = new fabric.Image('c'); 
var imageurl = myCanvas.toDataURL("image/png"); // this is the origional html canvas that I used to draw images.

fabric.Image.fromURL(imageurl, function (img) {
    img.scaleToWidth(fCanvas.width);
    fCanvas.add(img);
    fCanvas.renderAll();

}, { crossOrigin: 'anonymous' });
//fCanvas.deactivateAll().renderAll();
window.open('data:image/svg+xml;utf8,' + fCanvas.toSVG());

但在这种情况下,会生成空白输出。谁能告诉我问题出在哪里吗

您需要一个将位图图像矢量化的函数。有很多方法可以做到这一点,结果可能会有很大差异。对于大多数方法,质量都会下降。或者,您可以选择不丢失,只需将每个像素转换为一个矩形,即可创建大型文件。您可以使用反向四叉树来节省一点空间。但关键是,只需将文件保存为位图。如果需要矢量图像,则必须将渲染抽象为矢量,然后保存渲染步骤。此其他问题可能很有用@Blindman67我认为矢量图像可以转换为位图,但反之亦然是不可能的。正如这里所讨论的。如果我创建SVG元素并将带有画布生成uri的图像标记嵌入到该SVG中会怎么样。输出是否为矢量图像?可以从位图切换到矢量。我知道我已经写了软件来做这件事,有很多在线和离线的实用程序来做这件事。但是对于大多数方法来说,都有一个高质量的回报。而且。。。否向SVG图像的内容添加位图图像不会将其转换为矢量。您需要一个将位图图像矢量化的函数。有很多方法可以做到这一点,结果可能会有很大差异。对于大多数方法,质量都会下降。或者,您可以选择不丢失,只需将每个像素转换为一个矩形,即可创建大型文件。您可以使用反向四叉树来节省一点空间。但关键是,只需将文件保存为位图。如果需要矢量图像,则必须将渲染抽象为矢量,然后保存渲染步骤。此其他问题可能很有用@Blindman67我认为矢量图像可以转换为位图,但反之亦然是不可能的。正如这里所讨论的。如果我创建SVG元素并将带有画布生成uri的图像标记嵌入到该SVG中会怎么样。输出是否为矢量图像?可以从位图切换到矢量。我知道我已经写了软件来做这件事,有很多在线和离线的实用程序来做这件事。但是对于大多数方法来说,都有一个高质量的回报。而且。。。否向SVG图像的内容添加位图图像不会将其转换为矢量。