当然ではありますが、ブラウザが画像をロードし終わらないと、JavaScript でサイズを知る事ができません。EASELJS の createjs.Bitmap の引数は、文字列の URL では無く Image オブジェクトを使用しています。 画像サイズが解ったら、そのサイズを使って計算し、scaleX と scaleY で縮小します。 トリミングは createjs.Rectangle で四角形を作成して、Bitmap の sourceRect プロパティに設定します。表示位置は、x プロパティと y プロパティで Stage の中の位置を設定します。 画像を角丸にする為、Shape オブジェクトで画像に合った角丸の形状を作成して、Bitmap の mask プロパティに設定します。
実際の画像 1200x900
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <script> if ( typeof createjs === 'undefined' ) { document.write("<"+"script src=\"https://code.createjs.com/easeljs-0.8.2.min.js\"></"+"script>"); } </script> <script> $(function(){ $("#tm_action").on("click", function(){ // トリミング var rect = new createjs.Rectangle(700, 300, 200, 200); bitmap.sourceRect = rect; bitmap.x = 10; bitmap.y = 10; stage1.update(); }); $("#mask_action").on("click", function(){ shape.graphics.drawRoundRect(10, 10, 200, 200, 16, 16); bitmap.mask = shape; stage1.update(); }); $("#clear_action").on("click", function(){ bitmap.mask = null; stage1.clear(); }); }); </script> <input type="button" value="トリミング" id="tm_action"> <input type="button" value="角丸マスク" id="mask_action"> <input type="button" value="クリア" id="clear_action"> <br> <canvas id="load_area1" width="400" height="220" style='border:1px solid #000000'></canvas><br><canvas id="load_area2" width="400" height="300" style='border:1px solid #000000'></canvas> <script> var stage1 = new createjs.Stage("load_area1"); var stage2 = new createjs.Stage("load_area2"); var bitmap,shape; img = new Image() img.onload = function() { // トリミング用 bitmap bitmap = new createjs.Bitmap(this); stage1.addChild(bitmap); // マスク用 shape shape = new createjs.Shape(); var bitmap_all = new createjs.Bitmap(this); bitmap_all.scaleX = 400/bitmap_all.image.width; bitmap_all.scaleY = 300/bitmap_all.image.height; stage2.addChild(bitmap_all); stage2.update(); } img.src = "https://lh3.googleusercontent.com/-A5QW2HTze84/VyNZEIwxh4I/AAAAAAAAeRE/-rCcFQmsKawDMRrV6logONKz0i6LVhtYACCo/s1200/wing_elf.jpg"; </script>
easeljs のロードは、ブログの記事に書き込む事を想定して、そのページで一度きりのロードです。
|
【JavaScript ライブラリの最新記事】
- clipboard.js を使用してテキストをコピーする際に clipboard.js が必要とするパーツと意味
- clipboard.js のコピーさせるテキストを自由にダイナミックに渡す方法は、Advanced Usage の text です。
- JavaScript の内部コード文字列を SHIFT_JIS としてダウンロードさせる方法
- 自サイト(logical error を含む)で使用している SyntaxHighlighter のツールバーの問題点をごっそり自前で修正・カスタマイズしました。( その2 / ソースをクリップボード..
- 自サイト(logical error を含む)で使用している SyntaxHighlighter のツールバーの問題点をごっそり自前で修正・カスタマイズしました。( その1 / ソースの表示 )
- ブラウザ上のテキストデータを名前を付けて保存できる FileSaver.js を使って、テーブルのデータを Excel で開ける事を想定した CSV にして PC に保存
- JavaScript のみで、SHIFT_JIS や EUC-JP を UrlEncode に近い Escapeする Escape Codec Library
- JavaScript でクリップボードに文字列をコピーする Clipboard.js の使用方法と注意事項
- Lightbox2 ライブラリの今時の使い方
- Google Visualization API って apikey いらなくなった? / ライブラリロード方法が変わってました
- Lightbox2 で data-title にボタンを埋め込んで、クリックしたら 画像のファイル名を取り出して Lightbox2 を閉じるギャラリーのデモ
- EASELJS を使用した画像の分割と分割されたエリア毎のアニメーション / createjs.Ticker の reset と init はうまく動きませんでした
- Three.js r73 での Canvas で平面を飛翔させる為の詳細デモ
- クリスマスに備えて、『雪を降らす snowstorm.js』のカスタマイズ / ダウンロードも何も必要ありません。jQuery も必要ありません
- JavaScript : 誰でもすぐ使える Google 円グラフ(2) : データを Google ドキュメントから取得する
- JavaScript : 誰でもすぐ使える Google 円グラフ
- カラーピッカーのライブラリなのですが、ちょっと雑な作りだったので、修正してリリースです。
- google.load で Yahoo UI のメニューを使う