canvas实现图片镜像翻转的2种方式


Posted in HTML / CSS onJuly 22, 2020

1. 通过canvas自带的画布方法进行翻转

var img = new Image(); //这个就是 img标签的dom对象
  img.src = './sy.png';
  img.onload = function () {
    //图片加载完成后,执行此方法
    ctx.drawImage(img, posx, posy, 210, 80);
  };
play.addEventListener('click', function () {
     ctx.clearRect(0, 0, canvas.width, canvas.height);//清除画布
     //位移来做镜像翻转
     ctx.translate(210+ posx * 2, 0);
     ctx.scale(-1, 1); //左右镜像翻转
     
     //ctx.translate(0, 160 + posy * 2);
     //ctx.scale(1, -1); //上下镜像翻转
     ctx.drawImage(img, 0, 0, 210, 80);
  });

2.像素点的镜像翻转方法

//竖向像素反转
    function imageDataVRevert(sourceData, newData) {
      for (var i = 0, h = sourceData.height; i < h; i++) {
        for (var j = 0, w = sourceData.width; j < w; j++) {
          newData.data[i * w * 4 + j * 4 + 0] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 0];
          newData.data[i * w * 4 + j * 4 + 1] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 1];
          newData.data[i * w * 4 + j * 4 + 2] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 2];
          newData.data[i * w * 4 + j * 4 + 3] =
            sourceData.data[(h - i) * w * 4 + j * 4 + 3];
        }
      }
      return newData;
    }
//横向像素反转
    function imageDataHRevert(sourceData, newData) {
      for (var i = 0, h = sourceData.height; i < h; i++) {
        for (j = 0, w = sourceData.width; j < w; j++) {
          newData.data[i * w * 4 + j * 4 + 0] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 0];
          newData.data[i * w * 4 + j * 4 + 1] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 1];
          newData.data[i * w * 4 + j * 4 + 2] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 2];
          newData.data[i * w * 4 + j * 4 + 3] =
            sourceData.data[i * w * 4 + (w - j) * 4 + 3];
        }
      }
      return newData;
    }
``

var img = new Image(); //这个就是 img标签的dom对象
  img.src = './sy.png';
  img.onload = function () {
    //图片加载完成后,执行此方法
    ctx.drawImage(img, 0, 0, 210, 80);
  };
  
    //像素点操作
    var imgData = ctx.getImageData(0, 0, 210, 80);
    var newImgData = ctx.getImageData(0, 0, 210, 80);

    // var newImgData = ctx.getImageData(0, 0, w, h);
    ctx.putImageData(imageDataVRevert(newImgData, imgData), 0, 0);  //上下翻转
    // ctx.putImageData(imageDataHRevert(newImgData, imgData), 0, 0);//左右翻转~~~~

到此这篇关于canvas实现图片镜像翻转的2种方式的文章就介绍到这了,更多相关canvas图片镜像翻转内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木! 

HTML / CSS 相关文章推荐
使用HTML5和CSS3表单验证功能
May 05 HTML / CSS
css3实现图片遮罩效果鼠标hover以后出现文字
Nov 05 HTML / CSS
html5+css3气泡组件的实现
Nov 21 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
Nov 15 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
Sep 18 HTML / CSS
CSS3实现多样的边框效果
May 04 HTML / CSS
css3遮罩层镂空效果的多种实现方法
May 11 HTML / CSS
HTML5验证以及日期显示的实现详解
Jul 05 HTML / CSS
浅析HTML5中的 History 模式
Jun 22 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
Apr 26 HTML / CSS
html实现弹窗的实例
Jun 09 HTML / CSS
详解flex:1什么意思
Jul 23 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
Jul 20 #HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
Jul 16 #HTML / CSS
uniapp+Html5端实现PC端适配
Jul 15 #HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
Jul 10 #HTML / CSS
HTML5 背景的显示区域实现
Jul 09 #HTML / CSS
HTML5图片层叠的实现示例
Jul 07 #HTML / CSS
HTML5 层的叠加的实现
Jul 07 #HTML / CSS
You might like
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
探讨如何把session存入数据库
2013/06/07 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
Python编程入门的一些基本知识
2015/05/13 Python
python ansible服务及剧本编写
2017/12/29 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
程序员机试试题汇总
2012/03/07 面试题
高中生学习生活的自我评价
2013/10/09 职场文书
师德承诺书
2015/01/20 职场文书
公司感谢信范文
2015/01/22 职场文书
邀请函范文
2015/02/02 职场文书
家属慰问信
2015/02/14 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书