タイトル通りです。
あんまり実用的ではないかも?
方法
XMLHttpRequest
を使って、外部の画像をArrayBuffer
として取得してBlob
経由でcanvas
に描画します。
参考: CORS Enabled Image - HTML | MDN
ソースコード
簡易なデモコードです。
HTML は想像してください。
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");
// 適当にリクエストを投げる
var url = "https://pbs.twimg.com/profile_images/656821360358854657/qKSAV4Pz_bigger.png";
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.responseType = "arraybuffer";
req.addEventListener("load", function (event) {
if (req.status !== 200) {
// 一応ステータスコードだけ確認
alert("Invalid status code");
return;
}
// Blobを作成しURLを取得する
var blob = new Blob([req.response]),
blobUrl = URL.createObjectURL(blob);
// いつも通りcanvasに描画
var Image = new Image();
image.src = blobUrl;
image.addEventListener("load", function () {
ctx.drawImage(image, 0, 0);
});
});
req.send();
サンプル
GitHub にサンプルを置いてあります。
サンプル: Koneta/tainted-canvas
ソースコード: Koneta/tainted-canvas/index.html
おわりに
Blob
じゃなくてBase64
とかでも行けると思う。
文章がくそ雑い。
ゆるして。