画像ファイルのURLを与えて画像を読み込み、指定場所に表示する方法です。ここで扱う画像の容量は小さく読込時間への考慮はしないことにします。
<script> function 例1() { // A 画像読込以前の処理 var 画像 = document.getElementById("例1画像表示場所"); // ア 画像.onload = function() { // イ // B 画像読込後の処理 例:画像.width = 200 // (D・Eの呼出し) } // ウ 画像.src = "picture/image1.jpeg"; // エ // C 画像読込後の処理(のつもり) // D function 内部関数() { ~ ] } // E function 外部関数() { ~ ] </script> <p><button onclick="例1()">例1</button></p> <img id="例1画像表示場所"> <!-- オ -->
このパターンは、画像読込の基本形です。
注意事項
この下に <img id="例1画像表示場所"> があります。サイズの指定はありません。
function 例1() {
document.getElementById("例1画像表示場所").width = 300;
document.getElementById("例1画像表示場所").height = 300;
var 画像 = document.getElementById("例1画像表示場所");
を加えると、img のサイズが変わり、そのサイズいっぱいに画像が拡大」・縮小します。
例1では、画像ファイルを内部で指定しましたが、汎用化するために、外部から引数として与えることにし、その画像の絶対リンク、画像サイスを表示する例を示します。
<script> function 例2(画像URL, 表示場所) { var 画像 = new Image(); // ア 画像.onload = function() { // イ // 画像読込後処理の記述 document.getElementById(表示場所).innerHTML = "画像.src=" + 画像.src + "<br>" + "画像.width=" + 画像.width + "<br>" + "画像.height=" + 画像.height; } // ウ 画像.src = 画像URL; // エ // 画像読込後処理はここに記述できない } </script> <button onClick="例2('picture/image1.jpeg', '例2表示場所')">例3</button> <div id="例2表示場所"></div> <-- オ -->
画像.onload = function() { ~ } の内部で大量のコードを記述することになるのを避けるために、関数として外だしするほうが便利なことが多くあります。この場合、「画像」をグローバル変数として定義するか、引数として関数に渡すことが必要です。
<script> function 例2A(画像URL, 表示場所) { var 画像 = new Image(); 画像.onload = function() { 画像処理後処理(画像, 表示場所); } 画像.src = 画像URL; } function 画像処理後処理(画像, 表示場所) { document.getElementById(表示場所).innerHTML = "画像.src=" + 画像.src + "<br>" + "画像.width=" + 画像.width + "<br>" + "画像.height=" + 画像.height; } </script> <button onClick="例2A('picture/image1.jpeg', '例2表示場所')">例3</button> <div id="例2表示場所"></div> <-- オ -->
(結果は上の例2と同じ場所に表示されます)
画像を1.5倍拡大して表示します。
function 例2B(画像URL, 画像表示場所) {
var 画像 = document.getElementById("例1画像表示場所");
画像.onload = function() {
document.getElementById(画像表示場所).width = 画像.width * 1.5;
document.getElementById(画像表示場所).height = 画像.height * 1.5; // 一方だけにする
}
画像.src = 画像URL;
}
↓img境界(この下に、<img id="例3画像表示場所" width="300" height="300"> があります)
←img境界
↑img境界
function 例3(画像URL, 画像表示場所) {
var 画像 = document.getElementById(画像表示場所);
画像.onload = function() {
// サイズに関する記述がない
}
画像.src = 画像URL;
}
img のサイズ全体に画像が(縦横比を崩して)表示されます。
画像.onload = function() {
// 画像のサイズを指定
画像.width = 200;
画像.height = 100;
}
img のサイズ全体に指定した画像サイズに変わります。
画像.onload = function() {
画像.width = 200;
画像.height = 150;
// img 領域での画像まわりの空白を指定
画像.style.padding = "50px 20px 100px 80px"; // 上、右、下、左の順
}
↓img境界(この下に、<img id="例3B画像表示場所" width="300" height="300"> があります)
←img境界
↑img境界
<script>
function 例4(画像URL, キャンバス名) {
// canvas要素のオブジェクトを取得
var canvas = document.getElementById(キャンバス名);
var ctx = canvas.getContext("2d");
// 画像の表示
var 画像 = new Image();
画像.onload = function() {
// キャンバスのサイズを決める
canvas.width = 画像.width;
canvas.height = 画像.height;
// 画像をキャンバスに表示する(0,0 は必要。左上の味)
ctx.drawImage(画像, 0, 0);
}
画像.src = 画像URL;
}
</script>
<canvas id="例4キャンバス"></canvas>
画像の一部をキャンバスの指定場所に表示します。
その位置関係は図を参照してください。単位は px(ピクセル)
ここでは、画像のサイズは 200x150、キャンバスのサイズは 400x300 です。画像の右半分をキャンパスの適当な部分に(縦横比を無視して)表示します。
<script>
function 例5(画像URL, キャンバス名) {
// canvas要素のオブジェクトを取得
var canvas = document.getElementById(キャンバス名);
var ctx = canvas.getContext("2d");
// 画像の表示
var 画像 = new Image();
画像.onload = function() {
ctx.drawImage(画像,
100, 0, // sx, sy, 必須
100, 150, // sw, sh, 省略時:画像.width,画像.height
100, 50, // dx, dy, 省略時:0,0
200, 100 // dw, dh 省略時:画像.width,画像.height
);
}
画像.src = 画像URL;
}
</script>
<canvas id="例5キャンバス"></canvas>
上図の各値を与えて、どのような表示になるのかを演習します。画像の縦横比を保つ場合には、sw/sh = dw/dh にします。
sx= sy= sw= sh= dx= dy= dw= dh=
例5を関数にしたものです。画像ファイルを縦横比を保ちつつcanvasいっぱいに表示します。サムネイルの作成などに便利です。
<canvas>にwidth, heightは必須
画像の縦横比を保ちつつキャンバスいっぱいに表示します。このときキャンバスの横・縦に余裕が生じたとき、キャンバスのサイズを変えます。
ケース1
<canvas id="GIcanvas11" width="300" height="300"></canvas> canvasのwidth=300がネックになりheight=300x300/400=225になります。 |
ケース2
<canvas id="GIcanvas12" width="300" height="300"></canvas> canvasのheight=300がネックになりwidth=480x300/640=225になります。 |
<canvas>にwidth, heightが必須です。canvasのサイズは変えず、画像を縦位置:上・中・下、横位置:左・中・右に表示。余白部を残します。
サムネイルのように同一サイズのキャンバスが並んでおり、横長画像は下詰、縦長画像は中央に表示する場合、画像に関係なく、横位置を中、縦位置を下とします。
この下に<canvas id="GIcanvas2" width="300" height="300"></canvas>があります。
(上と同じ)