スタートページ> Javascript> 画像> CANVAS
drawImageZPR(canvas名, 画像名, 画像左上x,画像左上y, {オプション});
canvas名 // HTMLでサイズも定義
画像名
画像左上x,画像左上y // 画像の左上端(位置調整で変更)が CANVAS に表示する位置
オプションと省略値
位置調整 : "左上", // 画像のこの位置を、画像左上x,画像左上yに設定する
画像幅 : 0, 画像高 : 0, // 指定すると画像をズームして表示。0のときはズームしない
回転位置 : "左上", // 回転するときの画像の位置
回転角度 : 0 // 度分法で反時計回りで指定。0のとき回転しない。
(位置調整と回転位置 "中央", "左上", "左下", "右上", "右下")
<canvas id ="画像canvas" width="400" height="300"></canvas>
function drawImageZPR(canvas名, 画像名, 画像左上x,画像左上y,
{
位置調整 = "左上",
画像幅 = 0, 画像高 = 0,
回転位置 = "左上",
回転角度 = 0
}
) {
var canvas = document.getElementById(canvas名);
var ctx = canvas.getContext("2d");
ctx.fillStyle = 'silver';
ctx.fillRect(0,0,canvas.width, canvas.height);
var 画像 = new Image();
画像.onload = function() {
var 元画像幅 = 画像.width;
var 元画像高 = 画像.height;
// ================================ 処理の確認
// ================ ズーム処理の有無
if (画像幅 == 0) { // 画像幅, 画像高を与えないとき
var ズーム処理 = false;
画像幅 = 元画像幅;
画像高 = 元画像高;
}
else {
var ズーム処理 = true;
}
// ================ 位置調整の有無
if (位置調整 == "左上") {
var 位置調整処理 = false;
var 位置調整x = 0; var 位置調整y = 0;
}
else {
位置調整処理 = true;
if (位置調整 == "中央") { 位置調整x = 画像幅/2; 位置調整y = 画像高/2; }
else if (位置調整 == "左下") { 位置調整x = 0; 位置調整y = 画像高; }
else if (位置調整 == "右上") { 位置調整x = 画像幅; 位置調整y = 0; }
else if (位置調整 == "右下") { 位置調整x = 画像幅; 位置調整y = 画像高; }
}
// ================ 回転処理の有無
if (回転角度 == 0) var 回転処理 = false;
else {
回転処理 = true;
var 角度 = -回転角度 * Math.PI/180; // ラジアン、反時計回りに変換
// 回転位置
if (回転位置 == "左上") {var 回転位置x = 0; var 回転位置y = 0; }
else if (回転位置 == "中央") { 回転位置x = 画像幅/2; 回転位置y = 画像高/2; }
else if (回転位置 == "左下") { 回転位置x = 0; 回転位置y = 画像高; }
else if (回転位置 == "右下") { 回転位置x = 画像幅; 回転位置y = 画像高; }
}
// translateやrotateを使う前の標準状態を保存
ctx.save();
// ============================= 画像表示
// ================ ズーム処理後の画像表示
if ( (!位置調整処理) && (!回転処理) ) {
ctx.drawImage(画像, 0,0, 元画像幅, 元画像高, 画像左上x,画像左上y, 画像幅, 画像高);
}
if ( (!位置調整処理) && (!回転処理) ) {
ctx.restore();
return;
}
// ================ 位置調整処理後の画像表示
ctx.translate(画像左上x - 位置調整x, 画像左上y - 位置調整y); // 原点を画像の中心位置に
if (!回転処理) {
ctx.drawImage(画像, 0,0, 画像幅, 画像高);
}
if (!回転処理) {
ctx.restore();
return;
}
// ================ 回転処理後の画像表示
ctx.translate( 回転位置x, 回転位置y ); // 原点を画像の中央にする
ctx.rotate(角度); // 回転中心に30°時計回りに回転
ctx.translate( -回転位置x, -回転位置y ) ;
ctx.drawImage(画像, 0,0, 画像幅, 画像高);
ctx.restore();
}
画像.src = 画像名;
}