canvas File APIでアップロードした画像を配置したい
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,713
Javascript初心者です。
ブラウザ上でアップロードした画像を配置、文字を乗せて保存できるようなものを作りたいと調べながら試行錯誤しています。
canvas上にテキストを取得して配置まではできたのですが、File Apiを組み込見方がよくわかりません。
ご教授ください。宜しくお願いします。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<link rel="stylesheet" type="text/css" href="ui.css">
<script src="http://code.createjs.com/easeljs-0.7.1.min.js"></script>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="js.js"></script>
</head>
<body>
<dl class="table">
<dt>サンプル</dt>
<dd><input type="text" name="txt01" id="txt01" placeholder="サンプル" /></dd>
<dt>サンプル2</dt>
<dd><input type="text" name="txt02" id="txt02" placeholder="サンプル2" /></dd>
<dt>サンプル3</dt>
<dd><input type="text" name="txt03" id="txt03" placeholder="サンプル3" /></dd>
<dt>サンプル4</dt>
<dd><input type="text" name="txt04" id="txt04" placeholder="サンプル4" /></dd>
</dl>
<div class="btn">
<button id="update">画像作成</button>
</div>
<div class="wrap">
<canvas id="result" width="600" height="800"></canvas>
</div>
</body>
</html>
(function($){
var init = function(){
baseImg = new Image();
baseImg.src = 'bg.png';
stage = new createjs.Stage('result');
}
var genImage = function(){
var img = new createjs.Bitmap(baseImg);
stage.addChild(img);
var txt = {
'txt01' : {
'x' : 300,
'y': 100,
'size': '24px',
'align': 'center',
'color': '#fff'
},
'txt02' : {
'x' : 150,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
},
'txt03' : {
'x' : 300,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
},
'txt04' : {
'x' : 450,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
}
}
$.each(txt,function(key,value){
var content = $('#' + key).val();
var obj = new createjs.Text(content);
obj.textAlign = value.align;
obj.font = 'bold ' + value.size + '/1.5 Meiryo,sans-serif';
obj.x = value.x;
obj.y = value.y;
obj.color = value.color;
stage.addChild(obj);
});
}
$(function(){
$(window).on('load',function(){
init();
});
$('#update').on('click',function(e){
stage = new createjs.Stage('result');
genImage();
stage.update();
});
});
})(jQuery);
.wrap{
width: 600px;
height: 800px;
background:url(image.jpg) 0 0 no-repeat;
position: relative;
}
.result{
position: absolute;
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
HTMLのScriptのURL等は自分の環境に合わせてください。
極力コードは変えてません。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<link rel="stylesheet" type="text/css" href="ui.css">
<script src="easeljs-0.8.2.min.js"></script>
<script src="https://code.jquery.com/jquery-1.8.1.min.js"></script>
<script src="js.js"></script>
</head>
<body>
<dl class="table">
<dt>サンプル</dt>
<dd><input type="text" name="txt01" id="txt01" placeholder="サンプル" /></dd>
<dt>サンプル2</dt>
<dd><input type="text" name="txt02" id="txt02" placeholder="サンプル2" /></dd>
<dt>サンプル3</dt>
<dd><input type="text" name="txt03" id="txt03" placeholder="サンプル3" /></dd>
<dt>サンプル4</dt>
<dd><input type="text" name="txt04" id="txt04" placeholder="サンプル4" /></dd>
</dl>
<input type="file" id="file">
<div class="btn">
<button id="update">画像作成</button>
<button id="save">画像保存</button>
</div>
<div class="wrap">
<canvas id="result" width="600" height="800"></canvas>
</div>
</body>
</html>
(function($){
var init = function(){
baseImg = new Image();
baseImg.src = 'bg.png';
stage = new createjs.Stage('result');
}
var genImage = function(){
var txt = {
'txt01' : {
'x' : 300,
'y': 100,
'size': '24px',
'align': 'center',
'color': '#fff'
},
'txt02' : {
'x' : 150,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
},
'txt03' : {
'x' : 300,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
},
'txt04' : {
'x' : 450,
'y': 150,
'size': '20px',
'align': 'center',
'color': '#fff'
}
}
$.each(txt,function(key,value){
var content = $('#' + key).val();
var obj = new createjs.Text(content);
obj.textAlign = value.align;
obj.font = 'bold ' + value.size + '/1.5 Meiryo,sans-serif';
obj.x = value.x;
obj.y = value.y;
obj.color = value.color;
stage.addChild(obj);
});
}
$(function(){
$(window).on('load',function(){
init();
});
$('#file').on('change',function(e){
var file = e.target.files[0];
var reader = new FileReader();
reader.addEventListener('load', function(e){
var img = new createjs.Bitmap(reader.result);
stage.addChild(img);
stage.update();
}, false);
reader.readAsDataURL(file);
});
$('#update').on('click',function(e){
genImage();
stage.update();
});
$("#save").on("click", function(){
var canvas = document.getElementById("result");
var data = canvas.toDataURL("image/png");
var a = document.createElement('a');
var e = document.createEvent('MouseEvent');
a.download = "ダウンロードファイル.png";
a.href = data;
e.initEvent("click", true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
});
});
})(jQuery);
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2016/07/27 23:11
File API がコード中にありませんが、どの部分がわからないのでしょうか。まったくわからないというのであれば、書籍などでお調べください。