【javascript】canvasから画像を作成しよう

使用するクラス

HTMLCanvasElement

関数

  • getContext(contextType)
  • toDataURL()

CanvasRenderingContext2D

関数

  • beginPath()
  • ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle)
  • stroke()

プロパティ

  • strokeStyle

画像を作成する

canvasに描画した情報をpngファイルなどに変換して保存する事ができます。画像を作成ボタンを押すと「create-image.png」というファイルがダウンロードされます。画像をcanvasに貼り付ける方法は 【javascript】画像を読み込んでcanvasに描画しよう をご覧下さい。

window.addEventListener( 'load', function(){
  let canvas = document.querySelector( '#create-canvas145' );
  let context = canvas.getContext( '2d' );
  let x = 150;
  let y = 75;
  let radiusX = 50;
  let radiusY = 10;
  let rotation = 10;
  let startAngle = 0;
  let endAngle = 360;
  
  let id = setInterval(function(){
    context.strokeStyle = 'rgb(' + (rotation + 50) + ', 0, 0)';
    context.beginPath();
    context.ellipse(x, y, radiusX, radiusY, rotation * Math.PI / 180, startAngle, endAngle);
    context.stroke();
    if(180 < rotation)
      clearInterval( id );
    rotation += 12;
  }, 1000 / 60);

  let createImageBtn = document.querySelector( '#create-image145' );
  createImageBtn.addEventListener( 'click', function(){
    let img = canvas.toDataURL();
    let a = document.createElement( 'a' );
    a.href = img;
    a.download = 'create-image.png';
    document.body.appendChild( a );
    a.click();
    document.body.removeChild( a );
  });
});


サンプル

canvasの上で左クリックを押しながら移動すると線が描けます。「画像を作成」ボタンを押すと、canvasに描画されている状態が「create-image.png」ファイルとしてダウンロードできます。また、「一つ前」ボタンを押すと、一つ前の状態に戻れます。

太さ


【javascript】画像を読み込んでcanvasに描画しよう

使用するクラス

HTMLCanvasElement

関数

  • getContext(contextType)

CanvasRenderingContext2D

関数

  • drawImage( image, dx, dy, dwidth, dheight)

画像を描画する

context.drawImage()に画像と、画像を描画する位置情報(x、y)、画像のサイズ(width, height)を指定して描画します。画像のサイズを指定しないと、等倍で貼り付けられます。図形等の描画方法は【javascript】canvasに丸や四角や文字などを描いてみようをご覧ください。

window.addEventListener( 'load', function(){
  function drawImage(){
    var img = new Image();
    img.src = 'http://creakazukin.wp.xdomain.jp/wp-content/uploads/2017/06/cat.png';
    let x = 50;
    let y = 30;
    img.onload = function(){
      let width = img.width / 5;
      let height = img.height / 5;
      context.drawImage( img, x, y, width, height );
    };
  }
  let canvas = document.querySelector( '#image-canvas128' );
  let context = canvas.getContext( '2d' );
  drawImage();
});

サンプル

画像を選択して描画するサンプルです。ファイルを選択から好きな画像を描画してみてください。画像(jpeg, png, gif)以外のファイルは描画できません。

X座標
Y座標

【CSS】filterを使ってみよう

使用スタイル

filter: <filter-function> [<filter-function>]* | none

ぼかし

画像にぼかしを入れる事で曇りガラスのような雰囲気をCSSだけで作成できます。

#blur-img1{
  filter: blur(1px);
}
#blur-img2{
  filter: blur(4px);
}

オリジナル
オリジナル画像
blur(1px)
ぼかし加工した画像
blur(4px)
ぼかし加工した画像2

セピア

写真をセピアフィルターにかけるとこんな感じです。

#sepia-img1{
  filter: sepia(50%);
}
#sepia-img2{
  filter: sepia(100%);
}

オリジナル
オリジナル画像
sepia(50%)
セピア調の画像
sepia(100%)
セピア調の画像2

グレースケール

写真をグレースケールにするとこんな感じです。最近よく見かけるような気がします。

#gray-img1{
  filter: grayscale(50%);
}
#gray-img2{
  filter: grayscale(100%);
}

オリジナル
オリジナル画像
grayscale(50%)
グレースケールの画像
grayscale(100%)
グレースケールの画像2

フィルターを使った画像とオリジナルの画像の組み合わせ

グレースケールの中に色のある画像があると一際目立って見えますね。

#img-wrapper{
  position: relative;
}
#park-img{
  filter: grayscale(100%);
}
#cat-img{
  bottom: 10%;
  left: 10%;
  position: absolute;
  width: 20%;
}
背景画像
猫の画像