以前toDataURL()を使ってcanvasの内容を画像に変換する方法を記事にしましたが、別の方法としてtoBlob()を使うやり方を試してみます。
サンプルコード
HTMLは以前の記事と同じです。
<canvas id="canvas" width="480" height="320"></canvas> <button id="output">出力</button> <div id="result"></div>
JavaScriptは変換する部分を変更します。
window.onload = function() {
draw();
}
var canvas;
var ctx;
function draw() {
canvas = document.getElementById('canvas');
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'image.jpg';
img.onload = function() {
// マスク
ctx.beginPath();
ctx.arc(240, 160, 150, 0, Math.PI * 2, false);
ctx.clip();
ctx.drawImage(img, 0, 0);
ctx.font = 'bold 32px MS PGothic';
ctx.fillStyle = '#ff0000';
ctx.fillText('テスト', 260, 240);
}
}
document.getElementById('output').addEventListener('click', function() {
// canvasを画像に変換して出力
canvas.toBlob(function(result) {
console.log(result);
var imageURL = URL.createObjectURL(result);
document.getElementById('result').innerHTML = '<img src="' + imageURL + '">';
});
}, false);
toBlob()で変換した結果を31行目でconsoleに表示していますが、変換した内容をcreateObjectURL()を使ってアクセスできるURLを生成しています。
toBlob()で変換するデモページ
引数に拡張子を指定することもできます。
window.onload = function() {
draw();
}
var canvas;
var ctx;
function draw() {
canvas = document.getElementById('canvas');
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'image.jpg';
img.onload = function() {
// マスク
ctx.beginPath();
ctx.arc(240, 160, 150, 0, Math.PI * 2, false);
ctx.clip();
ctx.drawImage(img, 0, 0);
ctx.font = 'bold 32px MS PGothic';
ctx.fillStyle = '#ff0000';
ctx.fillText('テスト', 260, 240);
}
}
document.getElementById('output').addEventListener('click', function() {
// canvasを画像に変換して出力
canvas.toBlob(function(result) {
console.log(result);
var imageURL = URL.createObjectURL(result);
document.getElementById('result').innerHTML = '<img src="' + imageURL + '">';
}, 'image/jpeg');
}, false);
コメントが承認されるまで時間がかかります。