SlideShare a Scribd company logo
HTML5のCanvas入門
- Img画像を編集してみよう 2013/12/18(水) HTML5+α @福岡 - 第21回 LT資料
Photo by Web制作向け無料写真素材/ぱくたそ http://www.pakutaso.com
  自己紹介です
========
江原と申します。(@itokami1123)
福岡で業務アプリをJavaScriptで作って暮らしてます。
来年からはJava屋に転職。今は、名刺無いです…。
こんな野望が持ってます。
・業務系WebアプリのUIをモット使いやすくしたい!
・JavaとJavaScriptを仲良くさせたい!
・コミュニティの力で福岡を一つに!景気上昇↑雇用拡大↑
・生涯、福岡でエンジニアしたい!
本日の内容
========
HTML5のCanvas機能を使うとImgタグの画像編集が
サーバの力を借りなくても
クライアント(JavaScript)側で行うことが出来ます。
簡単ですがその手順や注意事項について説明させてください!
(

HTML5のCanvasて何?
HTML5のCanvasとは
ブラウザ上に図を描くための機能です。
JavaScriptで図形や画像の描画が出来ます!
例えば、ブラウザに線とか引けます。
!
<canvas id="sample" width="200" height="150"></canvas>

!
var canvas = document.getElementById('sample');
!
var ctx = canvas.getContext('2d');
!
描画対照を選択!
ctx.beginPath();
!
ctx.moveTo(10, 10);
ctx.lineTo(40, 40);
!
ctx.stroke();
例えば、ブラウザに線とか引けます。
!
<canvas id="sample" width="200" height="150"></canvas>

!
var canvas = document.getElementById('sample');
!
var ctx = canvas.getContext('2d');
!
ctx.beginPath();
描画道具
!
Canvas
描画対照から
Context
ctx.moveTo(10, 10);
描画する道具を
ctx.lineTo(40, 40);
!
いただきます。
ctx.stroke();
例えば、ブラウザに線とか引けます。
!
<canvas id="sample" width="200" height="150"></canvas>

座標位置を設定して描画できます。
!

!
線が引けた!
var canvas = document.getElementById('sample');
!
var ctx = canvas.getContext('2d');
!
ctx.beginPath();
!
ctx.moveTo(10, 10);
ctx.lineTo(40, 40);
!
ctx.stroke();
(

ふーん、こんなんで画像編集できんの?
ではCanvasで画像編集してみましょ〜!
imgとCanvasの下準備…。
(512px)

(512px) のpngを用意しました。

九九衰弱 -iPhoneアプリ https://itunes.apple.com/jp/app/99suizyaku/id571962674
九九の書かれたカードでする神経衰弱ゲーム。間に合わないと爆破しちゃうぞ。

HTMLとCSSはこんな感じで用意しました。
<img id="source_img" />
<canvas id="edit_canvas" width="200" height="200" >
</canvas>
img{
Canvas解像度(200px) ×(200px)
width: 200px; height: 200px;
box-shadow: 0 2px 4px rgba( 0, 0, 0, 0.5);
}
canvas{
画面に表示するサイズ
width: 200px; height: 200px;
box-shadow: 0 2px 4px rgba( 0, 0, 0, 0.5);
}
imgデータをロードして…

var $img = $('#source_img');
!
$img.load( drawCanvas );
!
$img.attr(
"src",
"http://jsrun.it/assets/3/F/d/Q/3FdQP.png"
);
!

imgタグに 画像を設定!
imgがload完了後 drawCanvas関数を呼びます。
imgデータをロードしてからのCanvas描画!

function drawCanvas( event){

Eventからimgタグを取得!

var $img = $( event.target),
img = $img[0];

Canvas描画道具取得

var $canvas = $( "#edit_canvas");
var ctx = $canvas[0].getContext("2d");
ctx.drawImage( img, 0, 0 );
}

imgデータを使ってCanvaに描画!
そのまま貼付けしてみると…
function drawCanvas( event){
var $img = $( event.target),

imgデータを (0,0)の位置に貼付け
img = $img[0];
Canvasは 200x200なのではみでます!
var $canvas = $( "#edit_canvas");

var ctx = $canvas[0].getContext("2d");
ctx.drawImage( img, 0, 0 );
}

Σ

(
貼付け先の幅と高さを指定してあげると…
function drawCanvas( event){
var $img = $( event.target),

imgデータを (0,0)の位置に
img = $img[0];
幅200px 高さ200pxで描画!

var $canvas = $( "#edit_canvas");

var ctx = $canvas[0].getContext("2d");
ctx.drawImage( img, 0, 0 , 200, 200);
}

(
爆弾だけ切り取りたい場合は…
function drawCanvas( event){
var $img = $( event.target),

imgの(12,332)から幅高さ100pxを
img = $img[0];
幅200px 縦200pxで描画!

var $canvas = $( "#edit_canvas");

var ctx = $canvas[0].getContext("2d");
ctx.drawImage(img, 12,332,100,100, 0,0,200,200);
}

(
(

あっ画像の向き間違えた…
大丈夫!画像を回転出来ます!
30度、60度、90度で回転させてみましょう〜!
ctx.rotate(

30 * Math.PI / 180);

ctx.drawImage( img, 0, 0 , 200, 200);

ctx.rotate(

60 * Math.PI / 180);

ctx.drawImage( img, 0, 0 , 200, 200);

ctx.rotate(

90 * Math.PI / 180);

ctx.drawImage( img, 0, 0 , 200, 200);

(

あれっ?消えたよ..
左上(0,0)を中心に回るみたいですね!
ctx.rotate(

30 * Math.PI / 180);

ctx.drawImage( img, 0, 0 , 200, 200);

(0,0)
だったら下の手順で行けそうですね!
①x,y座標を-100px ずらす

②90度回転!

 ③x,y座標を +100pxずらす
(表示されるとこに移動する)
さっきのイメージをコードにして…
①x,y左上に移動して..

ctx.translate( -100, -100 );

ctx.rotate(

90 * Math.PI / 180);

ctx.translate(

100,

100 );

②90度回転!

③表示できる位置に戻す

ctx.drawImage( img, 0, 0 , 200, 200);

!?表示されない (

あれっ!?
実は変換は逆に設定する必要があるのです。
ctx.translate(

ctx.rotate(

100,

100 );

③表示できる位置に戻す

90 * Math.PI / 180);

②90度回転!

ctx.translate( -100, -100 );

①x,y左上に移動して..
ctx.drawImage( img, 0, 0 , 200, 200);

\出来た/
(
(

せっかく加工した画像保存したいなぁ
大丈夫!画像を取り出せます!
Canvasの描画内容をBase64形式で取得出来ます。
var $canvas = $( "#edit_canvas");
var ctx = $canvas[0].getContext("2d");
ctx.translate(
ctx.rotate(

100,

100 );

90 * Math.PI / 180);

Base64形式で取得!
ctx.translate( -100, -100 );
ctx.drawImage( img, 0, 0 , 200, 200);
var base64Data = $canvas[0].toDataURL("image/png");
$('#out_img').attr( "src", base64Data);
canvasタグ

imgタグ
この例は、作成したBase64形式のデー
タをimgタグのsrcに指定しています。
文字列なのでサーバに送信してサーバ
側でPNG画像にする事も可能です。
まとめ
まとめ
========
・Canvasは自由に図形を描画する事が出来ます。
・CanvasはImgタグ画像を取り込む事が出来ます。
・Canvasに取り込めば画像を回転したり切り取ったり出来ます。
・画像変換の指定は逆の順番で書きましょう。
・加工した画像 canvas.toDataURL() で取り出せます。
HTML5のCanvasが使えるブラウザは結構多いと思います!
うまく使えばサーバの負荷を減らす事が出来そうですね!

http://fmbip.com/litmus/
これで発表はおしまいです!
ご清聴ありがとうございました!

More Related Content

PPTX
공간정보거점대학 1.geo server_고급과정
PDF
[132] rust
PPTX
Addressables で大量のリソース管理・困りどころと解消法
PDF
Icra2020 v1
PPTX
CloudFront経由でのCORS利用
PDF
프론트엔드 개발자를 위한 Layer Model
PDF
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
공간정보거점대학 1.geo server_고급과정
[132] rust
Addressables で大量のリソース管理・困りどころと解消法
Icra2020 v1
CloudFront経由でのCORS利用
프론트엔드 개발자를 위한 Layer Model
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011

What's hot (20)

PPTX
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
PDF
Unreal Engine 4 Education 1 基礎の基礎・最初は何から学ぶ?
PPTX
Goで実装した UPSIDERの決済金額リミット機能
PPTX
Proj4를 이용한 좌표계 변환
PDF
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
PDF
QGIS를 활용한 공간분석 입문(1일 6시간)
PDF
Multipeer connectivityを使った 動画のリアルタイム端末間共有
PDF
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
PDF
TDPT + VMCプロトコル on WebRTC
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
iPad LiDARで エンジニアカフェを3Dスキャン
PDF
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
PPTX
공간SQL을 이용한 공간자료분석 기초실습
PDF
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
PDF
SPARQLでマッシュアップ -LOD活用のための技術紹介-
PPTX
20170706 04 bridgepointでモデル駆動を実践する
PDF
입문 Visual SLAM - 5장 카메라와 이미지
PDF
PHP 5.5ネーティブキャッシュの話
PDF
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
PPTX
GraphQLのsubscriptionで出来ること
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
Unreal Engine 4 Education 1 基礎の基礎・最初は何から学ぶ?
Goで実装した UPSIDERの決済金額リミット機能
Proj4를 이용한 좌표계 변환
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
QGIS를 활용한 공간분석 입문(1일 6시간)
Multipeer connectivityを使った 動画のリアルタイム端末間共有
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
TDPT + VMCプロトコル on WebRTC
SPAセキュリティ入門~PHP Conference Japan 2021
iPad LiDARで エンジニアカフェを3Dスキャン
文献紹介:CutDepth: Edge-aware Data Augmentation in Depth Estimation
공간SQL을 이용한 공간자료분석 기초실습
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SPARQLでマッシュアップ -LOD活用のための技術紹介-
20170706 04 bridgepointでモデル駆動を実践する
입문 Visual SLAM - 5장 카메라와 이미지
PHP 5.5ネーティブキャッシュの話
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
GraphQLのsubscriptionで出来ること
Ad

Similar to HTML5のCanvas入門 - Img画像を編集してみよう - (20)

PPTX
JavaScriptで『漫画カメラ』的画像加工
PDF
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
PDF
SVG MANIAX Ver.2 - Mars vanilla
PDF
JavaScriptでいいじゃなイカ
PDF
Native x Webでいいとこどり開発 ~ピグトーク~
PDF
レスポンシブWebデザイン【発展編】
PDF
静岡Developers勉強会 HTML5&CSS3
PDF
Canvas勉強会
PDF
メディア芸術基礎 II Canvas + Javascriptで図形を描く
PDF
Css3でキャラクターアニメーションに挑戦してみた
KEY
東の方からきました@鹿駆動勉強会
PPTX
Imagemagickknowhow
PDF
SVG MANIAX - CSS Nite After dark7
PDF
スマホにおけるWebGL入門
PDF
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
PPTX
GoImagickThumbnail
PDF
Creators'night#13 tech#2今井
PDF
WordBench Nagoya 201601
PDF
HTML5の前のJavaScript入門
PPTX
go-thumber-imagick
JavaScriptで『漫画カメラ』的画像加工
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
SVG MANIAX Ver.2 - Mars vanilla
JavaScriptでいいじゃなイカ
Native x Webでいいとこどり開発 ~ピグトーク~
レスポンシブWebデザイン【発展編】
静岡Developers勉強会 HTML5&CSS3
Canvas勉強会
メディア芸術基礎 II Canvas + Javascriptで図形を描く
Css3でキャラクターアニメーションに挑戦してみた
東の方からきました@鹿駆動勉強会
Imagemagickknowhow
SVG MANIAX - CSS Nite After dark7
スマホにおけるWebGL入門
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
GoImagickThumbnail
Creators'night#13 tech#2今井
WordBench Nagoya 201601
HTML5の前のJavaScript入門
go-thumber-imagick
Ad

More from Toshio Ehara (20)

PDF
iPhoneアプリを Javaで書くよ?
PDF
Java初心者勉強会(2015/08/07)資料
PDF
Java電卓勉強会資料
PDF
BABELで、ES2015(ES6)を学ぼう!
PDF
AngularJSで業務システムUI部品化
PDF
traceur-compilerで ECMAScript6を体験
PDF
traceur-compilerで未来のJavaScriptを体験
PDF
AngularJS入門の巻2
PDF
JenkinsをJava開発でこんな感じで使っています
PDF
AngularJS入門の巻
PDF
AngularJS+TypeScriptを試してみた。
PDF
AngularJSのDirectiveで俺俺タグつくっちゃお
PDF
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
PDF
福岡のIT勉強会情報の集め方(LT資料)
PDF
BACKBONE.JSによるWebアプリケーション開発について
PDF
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
PDF
JavaScriptのテストコード 一緒に勉強しませんか??
PDF
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
PDF
LT Leap MotionとJavaScriptで遊ぼう!
PDF
JavaScriptもBACKBONE.JSならスッキリ ~MVCぽいのを初体験!~
iPhoneアプリを Javaで書くよ?
Java初心者勉強会(2015/08/07)資料
Java電卓勉強会資料
BABELで、ES2015(ES6)を学ぼう!
AngularJSで業務システムUI部品化
traceur-compilerで ECMAScript6を体験
traceur-compilerで未来のJavaScriptを体験
AngularJS入門の巻2
JenkinsをJava開発でこんな感じで使っています
AngularJS入門の巻
AngularJS+TypeScriptを試してみた。
AngularJSのDirectiveで俺俺タグつくっちゃお
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
福岡のIT勉強会情報の集め方(LT資料)
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
JavaScriptのテストコード 一緒に勉強しませんか??
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
LT Leap MotionとJavaScriptで遊ぼう!
JavaScriptもBACKBONE.JSならスッキリ ~MVCぽいのを初体験!~

HTML5のCanvas入門 - Img画像を編集してみよう -