单击时调整画布图像的大小并使用 javascript 将其居中

发布于 2024-09-26 20:34:32 字数 261 浏览 2 评论 0原文

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

缩放并不难做到:

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

问题是我还想将缩放图像集中在单击点的中心,就像普通的放大镜一样。

How is it possible to zoom a photo contained in a <canvas> tag?
In particular I'd like to zoom in on the photo at the point the user clicked.

The zoom is not difficult to do:

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

The problem is that I would also like to center the zoomed image in the point of the click, like a normal magnifier.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骑趴 2024-10-03 20:34:32

[工作演示]

数据

  • 调整大小:R
  • 画布大小:CwCh
  • 调整大小的图像大小:IwIh
  • 调整大小的图像位置:Ix< /code>, Iy
  • 在画布上的点击位置:Pcx, Pcy
  • 在原始图像上的点击位置:Pox, < code>Poy
  • 调整大小后的图像上的点击位置:PrxPry

方法

  1. 画布上的点击事件位置 ->图像上的位置:Pox = Pcx - IxPoy = Pcy - Iy
  2. 图像上的位置 ->调整大小图像上的位置:Prx = Pox * RPry = Poy * R
  3. top = (Ch / 2) - Pryleft = (Cw / 2) - Prx
  4. ctx.drawImage(img, left, top, img.width, img.height)

实现

// 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);

[Working demo]

Data

  • Resize by: R
  • Canvas size: Cw, Ch
  • Resized image size: Iw, Ih
  • Resized image position: Ix, Iy
  • Click position on canvas: Pcx, Pcy
  • Click position on original image: Pox, Poy
  • Click position on resized image: Prx, Pry

Method

  1. Click event position on canvas -> position on image: Pox = Pcx - Ix, Poy = Pcy - Iy
  2. Position on image -> Pos on resized image: Prx = Pox * R, Pry = Poy * R
  3. top = (Ch / 2) - Pry, left = (Cw / 2) - Prx
  4. ctx.drawImage(img, left, top, img.width, img.height)

Implementation

// 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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文