Как преобразовать растровое изображение холста в файл SVG или EPS в С#

У меня есть html5 canvas imageData и я хочу сохранить его как векторное изображение (esp или svg) на сервере. Я пытался использовать библиотеки Magick.NET и SVG Rendering Engine, но не смог найти способ преобразовать эти данные изображения в формат векторного изображения. Не могли бы вы поделиться кодом для этой цели. Вот мой код.

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-холст как векторное изображение на сервере без получения растрового изображения.

Итак, на данный момент я попытался использовать библиотеку ткани для создания изображения SVG с помощью метода ткани .toSVG(). Вот код:

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());

Но в этом случае генерируется пустой вывод. Кто-нибудь может подсказать, где проблема.


person jdk    schedule 14.11.2016    source источник
comment
Вам нужна функция, которая векторизует растровое изображение. Есть много способов сделать это, и результаты могут сильно различаться. Для большинства методов будет потеря качества. Или вы можете выбрать без потерь только огромные файлы, преобразовав каждый пиксель в прямоугольник. Вы можете сделать обратное квадродерево, чтобы сэкономить немного места. Но какой в ​​этом смысл, просто сохраните файл как растровое изображение. Если вам нужно векторное изображение, вы должны абстрагировать рендеринг как векторы, а затем сохранить шаги рендеринга.   -  person Blindman67    schedule 14.11.2016
comment
Этот другой вопрос может быть полезен. stackoverflow.com/questions/1861382/convert-png-to-svg   -  person Paul LeBeau    schedule 14.11.2016
comment
@ Blindman67 Я думаю, что векторное изображение можно преобразовать в растровое, но наоборот невозможно. как обсуждалось здесь. stackoverflow.com/questions/4022774 /   -  person jdk    schedule 15.11.2016
comment
Что, если я создам элемент SVG и вставлю тег изображения с созданным холстом uri в этот svg. Будет ли на выходе векторное изображение?   -  person jdk    schedule 15.11.2016
comment
Можно перейти от растрового изображения к векторному. Я знаю, поскольку я написал программное обеспечение для этого, и есть множество онлайн и оффлайн утилит для этого, но для большинства методов есть качество окупаемости. И... Никакое добавление растрового изображения к содержимому изображения SVG не преобразует его в векторы.   -  person Blindman67    schedule 15.11.2016
comment
Единственное решение, которое я нашел для создания вывода в векторном изображении, — это использовать SVG или любой другой веб-дизайнер. Поскольку я хочу, чтобы вывод был в векторном формате, чтобы я мог вырезать изображение с помощью винилового резака. Что должно быть лучшим выбором, кроме дизайнера холста?   -  person jdk    schedule 16.11.2016