• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 如何利用HTML5 canvas旋转图片?(实例演示)

如何利用HTML5 canvas旋转图片?(实例演示)

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了HTML5,canvas,旋转图片,实例演示等相关知识,希望对您有所帮助

如何利用HTML5 canvas旋转图片?(实例演示)


最近突然想研究一下js旋转图片的功能。对于之前的实现方式,就不先说了。现在HTML5很不错,主要了解一下HTML5中的图片旋转吧。

原理:利用canvas对象来旋转。

实现方式:首先创建一个canvas元素,然后把img元素绘入canvas。但是,实际上,这是默认情况,就是图片没旋转时。如果图片要旋转90度的话,就需要先把canvas画布旋转90度后再绘图。

描述如下:

内部旋转原理是这样的,图片的坐标是从左上角开始计算,向右为x正方向,向下为y正方向,在旋转画布canvas时,实际上是这个坐标在旋转,所以最后绘图方式不一样。

当时我还用了picpick来测量旋转一定角度后起点坐标,才知道原来旋转是这样的。

代码:

<body>    <button onclick="rotateImg('testImg', 'left')">向左旋转</button>      <button onclick="rotateImg('testImg', 'right')">向右旋转</button><br/>      <img src="./test.jpg" id="testImg"/>  <script>    function rotateImg(pid, direction) {          //最小与最大旋转方向,图片旋转4次后回到原方向          var min_step = 0;          var max_step = 3;          var img = document.getElementById(pid);          if (img == null)return;          //img的高度和宽度不能在img元素隐藏后获取,否则会出错          var height = img.height;          var width = img.width;          var step = img.getAttribute('step');          if (step == null) {              step = min_step;          }          if (direction == 'right') {              step++;              //旋转到原位置,即超过最大值              step > max_step && (step = min_step);          } else {              step--;              step < min_step && (step = max_step);          }          img.setAttribute('step', step);          var canvas = document.getElementById('pic_' + pid);          if (canvas == null) {              img.style.display = 'none';              canvas = document.createElement('canvas');              canvas.setAttribute('id', 'pic_' + pid);              img.parentNode.appendChild(canvas);         }          //旋转角度以弧度值为参数          var degree = step * 90 * Math.PI / 180;          var ctx = canvas.getContext('2d');          switch (step) {              case 0:                  canvas.width = width;                  canvas.height = height;                  ctx.drawImage(img, 0, 0);                  break;              case 1:                  canvas.width = height;                  canvas.height = width;                  ctx.rotate(degree);                  ctx.drawImage(img, 0, -height);                  break;              case 2:                  canvas.width = width;                  canvas.height = height;                  ctx.rotate(degree);                  ctx.drawImage(img, -width, -height);                  break;              case 3:                  canvas.width = height;                  canvas.height = width;                  ctx.rotate(degree);                  ctx.drawImage(img, -width, 0);                  break;         }      }  </script>  </body>

解释:canvas.width与height就不用解释了吧,应该。rotate应该也不用吧?关键是drawImage(img, x, y);

其中的x,y是指从哪一点开始画,因为整个坐标系统旋转了,所以,x,y不一样,比如step=1,图片向右旋转了90度,即坐标系旋转了90度,那么起始位置应该是x = 0, y= img.height



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • HTML5 canvas如何绘制酷炫能量线条效果(附代码)
  • 使用HTML5开发App有哪些优缺点
  • 带你了解HTML5 SVG,看看怎么绘制自适应的菱形
  • html5以及jQuery实现本地图片上传前的预览代码实例讲解
  • HTML5中video标签如何使用
  • html5的drag和drop的用法示例
  • html5新增的表单控件和表单属性有哪些
  • 如何利用HTML5 canvas旋转图片?(实例演示)

相关文章

  • 2022-04-29CSS如何禁止元素的点击事件
  • 2022-04-29Photoshop绘制逼真的老式收音机
  • 2022-04-29CDR快速制作质感立体字
  • 2022-04-29Thinkphp5中验证器的使用方法
  • 2022-04-29聊聊node中怎么借助第三方开源库实现网站爬取功能
  • 2022-04-29Thinkphp5.1 + layui时间范围设置方法
  • 2022-04-29ThinkPHP如何使用migrate实现数据库迁移
  • 2022-04-29WordPress调用站外文章解决方法
  • 2022-04-29搜索引擎优化的文章营销策略
  • 2022-04-29做好网站站内链接分配 提高网站百度指日可待

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 正则表达式解决input框固定输入值的格式(金额,特殊字符)
    • 又一个开源倒下:layUI官网即将下线,黯然退场!
    • 织梦cms二次开发普通会员隐藏/VIP会员显示
    • 推荐六款移动端 UI 框架
    • LayUI如何实现数据分页功能
    • PHPCMS模型字段单选复选只能填写不能使用SQL语句查询
    • Photoshop制作夹心饼干艺术字效果
    • 全平台通用评论神器一键自动填写昵称、邮箱和网址
    • Photoshop巧用滤镜打造璀璨星球夜空图
    • Thinkphp volist多重循环原样输出数组key值

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有