Реализация Pan / Zoom на HTML5 Canvas с несколькими изображениями

0

Я работаю над сайтом, на котором пользователь может загрузить изображение, а затем применить к нему различные эффекты (маски, текссты и т.д.). Так вызывается элемент canvas в HTML:

<div>
   <div onload="draw();">
      <canvas id="canvas" data-girar="0">
          <div style="display:none;">
              <img onload="draw()" id="imgDisp" src="">
              <img id="maskDisp" src="">
          </div>
      </canvas>
    </div>
    <div id="text_content"></div>
</div>

Эти два изображения расположены друг на друге, а также div_text_content. Я хочу реализовать простую функцию панорамирования/масштабирования, чтобы все они двигались вместе. Есть ли способ сделать это? Заранее спасибо. Кроме того, здесь находится draw(); функция:

function draw() {

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var newImg = document.getElementById('imgDisp');
var newMsk = document.getElementById('maskDisp');
var viewpanel = document.getElementById('view_panel');
var textcontent = document.getElementById('text_content');
document.getElementById("text_content").innerHTML = "";

canvas.width = 700;
canvas.height = 700;


if (newImg.height > 750 && newImg.width > 750){
    viewpanel.width = newImg.width/2;
    viewpanel.height = newImg.height/2;
    textcontent.style.height = "700px";
    textcontent.style.width = "700px";
    // Draw image
    ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width/1.3,newImg.height/1.74);
    // Draw frame
    ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width/1.3,newMsk.height/1.74);
    text_size('1')
}
else if (newImg.height < 500 && newImg.width < 500){{}

    viewpanel.width = newImg.width;
    viewpanel.height = newImg.height;
    canvas.height = 240;
    canvas.width = 240;
    textcontent.style.height = "240px";
    textcontent.style.width = "240px";
    // Draw image
    ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width*2,newImg.height*2);
    // Draw frame
    ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width*2,newMsk.height*2);
    text_size('2')
}

}

  • 0
    Где у вас проблема? На данный момент это скорее утверждение, чем вопрос.
  • 0
    @Jasper Мой вопрос: как я могу реализовать простую функцию панорамирования / масштабирования на холсте?
Показать ещё 1 комментарий
Теги:
canvas

1 ответ

0
Лучший ответ

Здесь скопируйте/вставьте часть приложения для рисования, которое я сделал. Пользователь устанавливает уровень масштабирования (входной идентификатор "масштабирования") и используется для всех вычислений. Независимо от того, какой процент масштабирования вы хотите отменить (1/n), и поскольку мой помечен как%, я использую 100/n. Мои возможности приложения панорамирования поступают из внешнего div, который overflow: auto. Также я не помещаю никаких элементов внутри холстов; на холсте есть фоновое изображение, а рисунки - наложения, которые можно сохранить как отдельные png-изображения. Я не уверен, какой эффект будет иметь место в вашей ситуации.

$('canvas').mousemove(function(e) {
    // x and y are globals, x inits to null, mousedown sets x, mouseup returns x to null
    if (x==null) return;
    x = (100/$('#zoom').val())*(e.pageX - $(this).offset().left);
    y = (100/$('#zoom').val())*(e.pageY - $(this).offset().top);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню