使用javascript调整点击和居中的画布图像大小

时间:2010-10-10 17:50:02

标签: javascript image canvas resize

如何缩放<canvas>标签中包含的照片? 特别是我想在用户点击的位置放大照片。

变焦并不难:

img.width = img.width + 100;
img.height = img.height + 100;
ctx.drawImage(img,0,0,img.width,img.height);

问题在于我还希望将缩放图像置于点击点的中心,就像普通放大镜一样。

1 个答案:

答案 0 :(得分:3)

[Working demo]

数据

  • 调整大小:R
  • 画布尺寸:CwCh
  • 调整后的图片尺寸:IwIh
  • 调整图片位置:IxIy
  • 点击画布上的位置:PcxPcy
  • 点击原始图片上的位置:PoxPoy
  • 点击已调整大小的图片上的位置:PrxPry

方式

  1. 点击画布上的事件位置 - &gt;图像上的位置:Pox = Pcx - IxPoy = Pcy - Iy
  2. 图像上的位置 - &gt;张贴调整后的图片:Prx = Pox * RPry = Poy * R
  3. top = (Ch / 2) - Pryleft = (Cw / 2) - Prx
  4. ctx.drawImage(img, left, top, img.width, img.height)
  5. <强>实施

    // resize image
    I.w *= R;
    I.h *= R;
    
    // canvas pos -> image pos
    Po.x = Pc.x - I.left;
    Po.y = Pc.y - I.top;
    
    // old img pos -> resized img pos
    Pr.x = Po.x * R;
    Pr.y = Po.y * R;
    
    // center the point
    I.left = (C.w / 2) - Pr.x;
    I.top  = (C.h / 2) - Pr.y;
    
    // draw image
    ctx.drawImage(img, I.left, I.top, I.w, I.h);