2017-11-16 3 views
0

svg blobをキャンバス経由でpngに変換する際に問題があります。typescript w/angle loding bloburlをimgに変換しない

ここに私のコード:

const canvas = document.createElement('canvas'); 
const ctx = canvas.getContext('2d'); 
const data = (new XMLSerializer()).serializeToString(svg); 
const svgBlob = new Blob([data], {type: 'image/svg+xml;charset=utf-8'}); 
console.log(svgBlob, canvas); 
const img = new Image(); 
const url = URL.createObjectURL(svgBlob); 

img.onload = (() => function() { 
     console.log('inside onload'); 
     ctx.canvas.width = size; 
     ctx.canvas.height = size; 
     ctx.drawImage(img, 0, 0); 
     URL.revokeObjectURL(url); 
     const imgURI = canvas 
     .toDataURL('image/png') 
     .replace('image/png', 'image/octet-stream'); 

     DownloadModalComponent.triggerDownload(imgURI); 
}); 
img.src = url; 
console.log(img.complete, img.currentSrc); 

これは、プレーンのJavaScript(もいくつかのjQuery)で以前働いていました。

コンソールがimg.complete falseに出力され、currentSrcが空です。

[ネットワーク]タブでは、ローカルのsvg urlが取得されていることがわかります。

答えて

0

let svgSource = "yourSVGcodehere"; // string of your <svg></svg> 
 
let data = "data:image/svg+xml," + encodeURIComponent(svgSource); 
 
let ctx = my2dcanvas.getContext("2d"); // my2dcanvas is your canvas element 
 
let img = new Image(); 
 
img.onload = function() { 
 
     ctx.drawImage(img, 0, 0); 
 
     my2dcanvas.toBlob(function(blob) { 
 
     doSomethingWithBlob(blob) // funciton processing the blob 
 
     // clear canvas context: 
 
     ctx.clearRect(0, 0, 320, 320) 
 
    }, 'image/png'); 
 
}; 
 
img.src = data;

これがPROD作業スニペットです。役に立ったら教えてください

+0

それは私の多くを助けた。問題はimg.onloadが '()=> function(){'私は今それを回避したが、それはバグか私の間違いですか? –

+0

あなたはあなたのスニペットで匿名の機能をしようとしていますが、なぜあなたはそれを望んでいるのかわかりません:)別のもの - 私はsvgBlobなどを作成するあなたのようなコードを持っていました。それから、私は誰かがこのように(データ文字列を使用して)それをやったのを見ました。そして、それは私がよりエレガントなsolutoin –

関連する問題