6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChromeでもDOMをCanvasにレンダリングして画像を取得するには

Last updated at Posted at 2018-04-28

背景

Firefoxだと

DOM オブジェクトを Canvas に描画する - HTML | MDN

の方法が使える、

しかし!

2018年4月時点のGoogleのChromeやChromiumだとこの方法やると、
作成したCanvasがOrigin clean出ない為、難しいエラーがでる。
(このMDNのページにはWebKitのバグの為との記述があるけどどうなんだろ)

たとえば、この方法でつくったCanvasをThree.jsのテクスチャとして使おうとすると

Failed to execute 'texImage2D' on 'WebGLRenderingContext': Tainted canvases may not be loaded.

と怒られてしまう。

解決方法

Blobの代わりにURLで指定すれば解決した。


const url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg_data);

See the Pen wjgomG by Junichi Kajiwara (@kjunichi) on CodePen.

なんでわかったのか

ここのサンプルがChromeでもうごいたので、Githubのリポジトリを
眺めていたら、

rasterizeHTML.js/src/svg2image.js

if (useBlobs) {
    return URL.createObjectURL(new Blob([svg], {"type": "image/svg+xml"}));
} else {
    return "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svg);
}

関連記事

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?