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 相关文章推荐
css3发光搜索表单分享
Apr 11 HTML / CSS
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
Nov 11 HTML / CSS
利用CSS3实现文本框的清除按钮相关的一些效果
Jun 23 HTML / CSS
CSS3圆角边框和边界图片效果实例
Jul 01 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
Sep 14 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
Aug 30 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
Jul 12 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
Jan 31 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
Apr 21 HTML / CSS
html5使用canvas绘制一张图片
Dec 15 HTML / CSS
详解HTML5 录音的踩坑之旅
Dec 26 HTML / CSS
CSS预处理框架——Stylus
Apr 21 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
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
推荐dojo学习笔记
2007/03/24 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Python常用知识点汇总
2016/05/08 Python
python使用udp实现聊天器功能
2018/12/10 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
JAVA程序员面试题
2012/10/03 面试题
社区八一活动方案
2014/02/03 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
python实现商品进销存管理系统
2022/05/30 Python