コアの問題:
目標は、SVG の一部を Web ページ上の固定サイズの Canvas 要素にレンダリングすることです。
私の試みた解決策:
CanVGが Canvas で SVG 画像をレンダリングする最も簡単な方法であるように見えるので、CanVGのレンダリングの前にviewBox属性を利用して画像をトリミングできると考えました。この点、ずっと悩んできました。
質問:
SVG 画像が提供された場合、その画像の一部を Canvas 要素にレンダリングするにはどうすればよいでしょうか?
コアの問題:
目標は、SVG の一部を Web ページ上の固定サイズの Canvas 要素にレンダリングすることです。
私の試みた解決策:
CanVGが Canvas で SVG 画像をレンダリングする最も簡単な方法であるように見えるので、CanVGのレンダリングの前にviewBox属性を利用して画像をトリミングできると考えました。この点、ずっと悩んできました。
質問:
SVG 画像が提供された場合、その画像の一部を Canvas 要素にレンダリングするにはどうすればよいでしょうか?
オフスクリーン キャンバスを作成し、CanVGを使用してレンダリングします。
var full = document.createElement('canvas');
full.width=800; full.height=600;
canvg(full, '<svg>…</svg>');
次を使用して、この canvas-as-image の一部を別のキャンバスの領域にコピーしdrawImage
ます (パラメーターの詳細についてはリンクを参照)。
var ctx = myVisibleCanvas.getContext('2d');
ctx.drawImage(full,10,20,80,60,92,16,80,60);
編集: ただし、SVG ソースに (JS で直接または XMLHTTP 要求を介して) アクセスでき、viewBox
レンダリング前に属性を変更できる場合、上記は必要ありません。あるキャンバスに直接レンダリングされた SVG ファイルを示すこのデモを参照してから、viewBox
属性を変更し、クリップされた領域を別のキャンバスにレンダリングします。
あなたが得る問題はどれですか?context.drawImage 関数には、優れたトリミング機能が組み込まれています。標準の 3 つのパラメーター (画像オブジェクト、x 位置、y 位置) の代わりに、9 つのパラメーターを渡すだけで、画像がトリミングされます。パラメータは次のとおりです。
context.drawImage(
imageObject,
original image x crop position,
original image y crop position,
original image crop width,
original image crop height,
canvas image x crop position,
canvas image y crop position,
canvas image crop width,
canvas image crop height
)
これが CanVG で機能するかどうかはわかりませんが、画像オブジェクトを関数 drawImage() に渡すことができる限り、コードに記載されているようにトリミングできます。