html5 Canvas实现图片旋转

本文主要介绍了htm5l canvas实现图片旋转的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

众所周知canvas是位图,你可以在里面渲染你要的东西,不过你只能操作canvas的属性来进行编辑。就是说你并不能操作画进canvas的东西,例如我在canvas里添加一幅画,我现在想将那幅画移动10px,我们并不能直接操作那幅画,因为我们根本获取不到那幅画的任何信息。我们永远只能获取到的是canvas对象。

那问题来了,我要怎么旋转图片

其实canvas是提供了各种各样的接口去控制画布的,旋转有rotate()方法。

其实这里的旋转并不是真的把这个画布旋转了,例如我ctx.rotate(Math.PI/2)旋转90°了。并不是说我们在页面上就会看到canvas旋转了90°。我们可以理解为其实canvas是有两个部分组成的,一个是肉眼看得到的画布,一个是用于操作的虚拟画布,我们所有在虚拟画布上的动作都会映射到真实画布中去。

立即学习“前端免费学习笔记(深入)”;

这样说可能很难理解,下面用图来解释一波。首先介绍一下rotate()方法先,它可以旋转画布,旋转点画布的原点,而画布的原点默认是左上角。

html5 Canvas实现图片旋转

下面在给大家看一下旋转45°所呈现的效果:

html5 Canvas实现图片旋转

在这里我们可以看到我刚刚所说的虚拟的画布旋转45°后再向虚拟的画布内插入图片,然后真实画布所呈现的就是虚拟画布和真实画布相交的部分了。这里可能不太好理解,大家仔细想想。

两张图的代码是这样的:

// 未旋转var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.drawImage(img, 0, 0)// 逆时针旋转45°var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.rotate(-Math.PI / 4);ctx.drawImage(img, 0, 0)

登录后复制

看到这里我想大家基本知道rotate()的使用方法了。

下面就来说说怎么实现再图片中心旋转

再说之前向给大家了解一下canvas的另外两个方法的用法:

ctx.translate(x, y): 这个方法是可以移动画布原点的方法,参数分别是x,y;

ctx.drawImage(img, x, y):这个方法上面用过了,不过里面是有三个参数的,第一个是要插入的图片dom,后面两个x,y分别为插入图片时对img的位置进行修改。

从图可以看出,要想实现围绕图片中心旋转45°,就得把canvas的原点移动到这张图的中心,再旋转canvas,再就是插入图片时将图片往左上角平移图片自身的一半。

这里分别有三个步骤:

移动canvas原点

旋转canvas

插入图片并移动

html5 Canvas实现图片旋转 

下面把这三个步骤分开看看(图片的宽高为400和300)

移动canvas原点

var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.translate(200, 150)ctx.drawImage(img, 0, 0)

登录后复制

html5 Canvas实现图片旋转

旋转canvas

var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.translate(200, 150)ctx.rotate(-Math.PI / 4)ctx.drawImage(img, 0, 0)

登录后复制

html5 Canvas实现图片旋转

插入图片并移动

var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.translate(200, 150)ctx.rotate(-Math.PI / 4)ctx.drawImage(img, -200, -150)

登录后复制

html5 Canvas实现图片旋转

这样就大功告成了

ps:大家再做完一系列动作后一定要将canvas的原点,旋转复原。不然再经过一系列操作后,canvas的设置会乱掉。每操作一次完成后都把设置恢复回原样就好了。

var img = document.getElementById('img')var canvas = document.getElementById('canvas')var ctx = canvas.getContext("2d")ctx.translate(200, 150)         // 1ctx.rotate(-Math.PI / 4)        // 2ctx.drawImage(img, -200, -150)// 恢复设置(恢复的步骤要跟你修改的步骤向反)ctx.rotate(Math.PI / 4)         // 1ctx.translate(-200, -150)       // 2// 之后canvas的原点又回到左上角,旋转角度为0// 其它操作...

登录后复制

还有一点要注意的,我刚刚示范的是图片相对canvas x轴y轴为0所示范的例子,如果不为0的情况下,只需在移动原点的时候ctx.translate(200+x, 150+y)。这里的200和150是该图片的宽高的一半,x,y就是图片相对canvas的x,y

相关推荐:

如何用CSS做图片旋转效果

h5头像图片旋转css3精确控制每个图片的位置

让图片旋转任意角度及JQuery插件使用介绍

以上就是html5 Canvas实现图片旋转的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2900445.html

(0)
上一篇 2025年3月10日 23:58:44
下一篇 2025年2月22日 22:57:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HTML5 type=file文件上传功能实例详解

    本文主要和大家介绍html5新特性之type=file文件上传功能,需要的朋友可以参考下,希望能帮助到大家。 1、语法 2、属性(以下三个仅HTML5支持,因此存在兼容性问题) (1)multiple :表示用户是否可以选择多个值。mult…

    2025年3月10日
    200
  • Html5之IphoneX适配方法分享

    iphonex 的适配,关键在于怎么让页面适应 “齐刘海”、底部操作区域以及大圆角问题。iphonex 相对于其他手机,不同之处在于设备虽同样都是一个屏幕,但其实被分为了好几个模块,本文主要和大家介绍了html5 iphonex 适配方法的…

    2025年3月10日
    200
  • 利用Canvas制作旋转的太极示例分享

    好久没动canvas了,今下午突然想回顾一下,就写了个旋转的太极,哈哈,蛮好玩的,在这里就将自己写的过程展示出来,旋转使用的css实现的,没有用canvas自己的,希望大佬们不要吐槽。本文主要和大家介绍了Canvas制作旋转的太极的示例的相…

    2025年3月10日
    200
  • px单位html5响应式方案详解

    移动端h5响应式方案最近这几年用得最多的最多的就是rem方案了。这个需要计算根元素的font-size来实现响应式。本文主要和大家介绍了px单位html5响应式方案的相关资料,希望能帮助到大家。 但这种方案也有一个缺点,那就是font-si…

    编程技术 2025年3月10日
    200
  • canvas线条的属性解析

    本文主要和大家介绍了canvas线条的属性详解的相关资料,小编觉得挺不错的,现在分享给大家,希望能帮助到大家。 一、线条的帽子lineCap 取值:butt(默认值),round圆头,square方头 var canvas=document…

    2025年3月10日 编程技术
    200
  • 纯HTML5+CSS3制作图片旋转

    这篇文章主要介绍了纯html5+css3制作图片旋转,html5结合css3 实现的一些动画特效,实现起来比较容易,感兴趣的小伙伴们可以参考一下 此实例可以应用到许多项目中,很实用,希望大家可以掌握。 效果图如下: 这个效果实现起来其实并不…

    2025年3月10日
    200
  • 如何实现canvas环形倒计时组件

    本篇文章主要介绍了canvas环形倒计时组件的示例代码,内容挺不错的,现在分享给大家,也给大家做个参考。 本文介绍了canvas环形倒计时组件的示例代码,分享给大家,具体如下: 效果如下图一: Canvas环形倒计时组件 Canvas环形倒…

    2025年3月10日 编程技术
    200
  • 使用HTML5和CSS3实现生日蛋糕的制作

    这篇文章主要介绍了关于使用HTML5和CSS3实现生日蛋糕的制作,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 “祝你生日快乐,祝你生日快乐……”,过生日有生日歌,生日蛋糕也是必不可少的,这篇文章主要为大家详细介绍了程序员利…

    2025年3月10日
    200
  • 利用html和CSS3实现导航栏

    本篇文章给大家分享基于html和css3制作酷炫的导航栏,效果非常美观,需要的朋友可以从参考下  主要亮点:   1 ul 水平显示   2 li 去掉圆点   3 li中字体水平、竖直居中 立即学习“前端免费学习笔记(深入)”;   4 …

    2025年3月10日
    200
  • angularJS结合canvas画图的实现

    这篇文章主要介绍了angularjs结合canvas画图例子的方法,需要的朋友可以参考下 这里给大家分享一个angularJS结合canvas画图例子,效果非常不错,赞一个先。 nbsp;html>                  …

    编程技术 2025年3月10日
    200

发表回复

登录后才能评论