javascript - 如何使用 div 选择器在 canvas 元素中完美绘制图像的一部分

标签 javascript jquery

我一直无法找到下一个问题的解决方案,我有一个带有 div 的图像,我们称其为“div 选择器”,div 可以由用户拖动。我想要完成的是绘制 div 内图像的内容,我已经编写了大部分代码,并且实际上绘制了图像的一部分,但它并不完全是 div 选择器内图像的内容。

我认为问题出在这里:

let sourceWidth = 137; // previous value: $(sq).width() EDIT: NEW VALUES
let sourceHeight = 137; //previous $(sq).height()

当我更改这些值时,图像的一部分会发生变化,但我无法找到允许以编程方式更改值的微积分,因此如果图像高度/宽度发生变化,则不会有问题,我当前拥有的值 被发现正在尝试另一张图像。

这是 jsfiddle:https://jsfiddle.net/9j3ypfyh/39/

新jsfiddle:https://jsfiddle.net/9j3ypfyh/126/

非常感谢您的宝贵时间。

编辑: 我还可以选择增加红色方 block 的大小,因此它应该适用于不同的方 block 大小以及不同的 Canvas 大小,因为我将对其进行媒体查询。

编辑2 我添加了使正方形改变大小的部分

编辑3 我使用以下值测试了代码:

let sourceWidth = $(sq).width();
let sourceHeight = $(sq).width();

我得到了特定屏幕尺寸的下一个结果(正是我需要的!!c:) enter image description here 但是问题是,如果屏幕尺寸发生变化,它就不再起作用了:( enter image description here

请帮忙!!

编辑

有没有办法根据所选区域创建新图像并忘记绘制图像?

最佳答案

正如我在评论中提到的,问题是由图像实际大小与图像元素大小不同引起的。您可以使用图像上的 naturalWidthnaturalHeight 属性来获取 Canvas 使用的尺寸。

This fiddle有工作代码。相关部分是计算(实际尺寸/dom尺寸)的比率并适当缩放源值。

        let widthScale = imageObj.naturalWidth / imageObj.width;
        let heightScale = imageObj.naturalHeight / imageObj.height;
        let sourceX = sq.offsetLeft * widthScale;
        let sourceY = sq.offsetTop * heightScale;
        // the -5 and +10 make sure the boundaries of the square match the image element
        let sourceWidth = ($(sq).width() - 5) * widthScale; 
        let sourceHeight = ($(sq).height() + 10) * heightScale;

关于javascript - 如何使用 div 选择器在 canvas 元素中完美绘制图像的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48966034/

相关文章:

javascript - 远程提交表单,本地确认

javascript - jQuery 函数避免复制/粘贴

jquery - 在 jQuery Mobile 中导航时,来自先前文件的样式会干扰当前页面样式

javascript - 多个页面需要自动刷新,每个页面上保存不同的选项

javascript - 如何在谷歌表格中获取更新的单元格值

javascript - 如何在 JavaScript 中创建嵌套菜单?

php - 多选复选框显示表记录

javascript - 子域名无法使用 express-vhost

javascript - 如何将当前日期时间与 javascript 中的另一个日期时间进行比较

javascript - CSS 硬件加速宽度?