javascript - HTML 5 Canvas - 旋转、缩放、平移和绘制图像

标签 javascript html css canvas transform

我正在尝试将 html5 图像放置在 Canvas 内。使用 css 变换属性对图像进行平移、旋转和缩放。主要问题是如何复制图像的属性并将它们应用到 Canvas 上

您可以尝试下面的 jsfiddle 链接:图像可以缩放、移动和旋转,绿色框中显示的内容应与红色框中的内容相同。

<强> https://jsfiddle.net/q7y1py5f/3/ 。在这里我可以移动和缩放图像,但是当旋转开始时什么也不起作用。这是让我烦恼的代码(javascript jsfiddle 中的第 58 行):

context.save();

context.translate(image.width / 2, image.height / 2);
context.rotate(angle * Math.PI/180);
context.translate(((-image.width) / 2), ((-image.height) / 2));

context.translate(-x, -y);
context.scale(scale, scale);

context.drawImage(image, 0, 0);

context.restore();

这里的 x 和 y 是绿色容器的左上角和图像的左上角之间的差值。任何帮助将不胜感激。

我已经设法让每个属性单独工作,但是当将它们全部组合在一起时,它就不起作用了。当我仅平移和缩放图像并应用于 Canvas 上下文时,一切都很好,但是当我添加图像的旋转时,它并不在它应该在的位置。

我尝试了以下方法 - 使用 Angular 计算元素的左上角以获得正确的值,然后对其进行平移和旋转。

最佳答案

在函数 canvasCropping 中编写

var left =cropper.offset().left - img.offset().left, 顶部=cropper.offset().top-img.offset().top,

但是旋转和缩放会改变元素偏移,所以你得到了错误的平移坐标。将其更改为: var left = -(cropper.offset().left - transform.translate.x-initialOffset.left), 顶部 = -(cropper.offset().top -transform.translate.y-initialOffset.top),

initialOffset - 图像的初始偏移量。

以及drawRotatedImage中的一些更改 ` var drawRotatedImage = 函数(上下文、图像、x、y、 Angular 、宽度、高度、比例){

    context.save();

    // Move registration point to the center of the canvas
    context.translate(x+image.width/2,y+image.height/2);
    context.rotate(angle* Math.PI / 180);// angle must be in radians
    context.scale(scale, scale);
    // Move registration point back to the top left corner of canvas
    context.translate((-image.width)/2, (-image.height)/2);

    context.drawImage(image, 0, 0);

    context.restore();
};

`

关于javascript - HTML 5 Canvas - 旋转、缩放、平移和绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36859472/

相关文章:

jquery - 所有屏幕的完整背景 slider ,为较小的图像保持纵横比

javascript - 优化搜索值未显示在 opencart 主题中

javascript - 将对象添加到 $scope 的 2 种方法,只有一种有效

javascript - 基于嵌套函数条件的 'return true' 的最佳方法

javascript - jquery 仅在一个类中显示更多函数目标 p 标签

javascript - 没有 jQuery 的 .html() 和 .append()

javascript - 使用 JavaScript 获取字符串的一部分

html - 网页高度在移动浏览器中被拉伸(stretch)

javascript - 如何通过数字键盘输入验证小数点后两位的输入值?

html - 如何创建最大宽度的媒体查询?