簡體   English   中英

將SVG數據轉換為可以上傳的SVG文件

[英]Convert SVG Data to SVG File that can be uploaded

使用如下所示的canvas.toSVG:使用FabricJS 創建背景畫布我可以通過調用canvas.toSVG()將HTML5 Canvas轉換為如下所示的SVG數據:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="85.999967in" height="55.812440in" style="background-color: #ffffff" viewBox="0 0 650 421.84" xml:space="preserve">
<desc>Created with Fabric.js 1.6.0-rc.1</desc>
<defs></defs>
<g transform="translate(516.24 217.93) scale(0.47 0.47)">
<image xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAyADIAAD/2wBDAAEBAQEBAQEBAQEBAQEB…lq4JVWvJFVClTiCkAAgF9IIBHyAQACB/oAf6+gMzMMVWDEN7kh5AkN0dEwR3++iCe/+ez9f//Z" x="-200" y="-193.5" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" width="400" height="387" preserveAspectRatio="none"></image>
</g>
</svg>

但是,我需要能夠通過AJX或Node(即請求或Unirest)將.svg文件上傳到供應商API。

如何將上面的SVG / XML數據轉換為可以保存然后上傳的SVG文件?

這就是我用於.png的方式,但是當我使用乘法器時,大的畫布放大會導致瀏覽器崩潰,所以這就是為什么我嘗試使用SVG的原因。 png會自動進行base64編碼,因此會在Node中解碼,流式傳輸到temp目錄,然后按以下方式發布:

客戶端:

 // Multiply Canvas
        var img = canvas.toDataURL({
            // Multiplier appears to accept decimals
            format: 'png',
            multiplier: 5        
});

 $http.post('/postVendor', { filename: filename, file: img }).success(function (data) {...

服務器端/節點:

app.post('/postVendor', function (req, res, next) {

    var filename = req.body.filename;
    var file = req.body.file;
    var fileloc = 'upload/' + filename;

    //var base64Data;
    fileBuffer = decodeBase64Image(file);

    fs.writeFileSync('upload/' + filename, fileBuffer.data);

 unirest.post('http://myvendorsAPI/ws/fileuploads')
.headers({ 'Content-Type': 'multipart/form-data' })
.field('filename', filename)// Form field
.attach('file', fileloc)// Attachment
.end(function (response) {
        console.log(response.body);
        //fs.unlinkSync(fileloc);
        res.send(response.body);
    });
})

由於toSVG輸出XML,我如何將其轉換為SVG文件,以及如何將其上傳?

    var file = canvas.toSVG({
        // Multiplier appears to accept decimals
        width: '200mm',
        height: '300mm'      

});

$ http.post('/ postVendor',{文件名:'myfile.svg',文件:file})。success(function(data){...}

在服務器端,無需解碼base64編碼,因為您只是上載文本,而從ajax中輸入urlencode就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM