假设这有一张养眼图片,它长这样

接着我想把照片垂直翻转一下,变成这样

翻转后体验了一把倒立的美女. 经过对比,垂直翻转后,上边和下边都互换了过来,也就是说,上边的像素根据垂直中轴对称和下边的像素进行了互换操作,垂直翻转的关键点就是每一列的上下像素根据轴对称,确实很简单,以下是实现的步骤

1.获取画布上图像的像素信息

2.遍历总行数一半的每一行作为外循环(向下取整)

3.遍历当前行的列作为内循环,把列的每个通道按照水平轴对称和镜像里的通道互换

4.把处理后的像素信息放回画布

现在知道怎么做了,继续

function Filter(context){this.context = context;
}
Filter.prototype.constructor = Filter;
Filter.prototype.flipVertical = function(startX, startY, w, h){// 1.获取图像信息let imgdata = this.context.getImageData(startX, startY, w, h);let middleAxle /*中轴*/ = Math.floor(h / 2),rowAisles = w * 4;// 2.遍历总行数一半的每一行作为外循环(向下取整)for (var curRow = 0; curRow < middleAxle; curRow++) {// let aisleStart /*开始的通道位置*/ = curRow * rowAisles,mirrorStart /*中轴对称的开始位置*/ = (h - curRow - 1) * rowAisles;// 3.遍历当前行的列作为内循环,把列的每个通道按照水平轴对称和镜像里的通道互换for (; aisleStart < rowAisles * (curRow + 1); aisleStart += 4, mirrorStart += 4) {var tr = imgdata.data[aisleStart],tg = imgdata.data[aisleStart + 1],tb = imgdata.data[aisleStart + 2],ta = imgdata.data[aisleStart + 3];imgdata.data[aisleStart] = imgdata.data[mirrorStart];imgdata.data[aisleStart + 1] = imgdata.data[mirrorStart + 1];imgdata.data[aisleStart + 2] = imgdata.data[mirrorStart + 2];imgdata.data[aisleStart + 3] = imgdata.data[mirrorStart + 3];imgdata.data[mirrorStart] = tr;imgdata.data[mirrorStart + 1] = tg;imgdata.data[mirrorStart + 2] = tb;imgdata.data[mirrorStart + 3] = ta;}}// 4.把处理后的像素信息放回画布this.context.clearRect(startX, startY, w, h);this.context.putImageData(imgdata, startX, startY);
}

接着对预先渲染到画布上的图像,一顿操作猛如虎,调用flipVertical方法,大功告成! 查看示例(flipVertical)

总结一下:图像的翻转其实是对图像每个像素的通道按照一定的规则(这里规则是上下颠倒)重新排列).

The End~

canvas实现图像垂直翻转相关推荐

  1. 使用canvas操作图像

    canvas 获取截图   具体是使用 canvas 的 toDataURL 方法: var image = new Image(); image.src = canvas.toDataURL(&qu ...

  2. canvas绘制图像image

    canvas绘制图像image 1.image的三个script的基本语法 准备工作:1.定义画布长度,获取2D绘图环境 ​ 2.建立对面对象,设置图片路径 ​ 3.载入图片,开始绘制 a.简单的画布 ...

  3. Python实现图像垂直翻转

    Python实现图像垂直翻转 图像垂直翻转是对图像进行镜像操作的一种,通过Python的PIL库可以很方便地实现图像的反转操作.在本篇文章中,我将介绍如何使用Python实现图像的垂直翻转. 首先需要 ...

  4. canvas绘制图像-drawImage

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. html5图片灰度显示,HTML5 组件Canvas实现图像灰度化

    HTML5发布已经有很长一段时间了,一直以来从来没有仔细的看过,过年刚来随便看看 发现HTML5中的Canvas组件功能是如此的强大,不怪很多牛人预言Flash已死,死不死 不是我要关心的,我关心的C ...

  6. Canvas 渐变 图像组合效果 颜色翻转

    // canvas 简单例子 var canvas = document.getElementById('canvas'); if (canvas.getContext) {var context = ...

  7. HTML5 组件Canvas实现图像灰度化

    新建一个html页面,在body tag之间加入 <canvas id="myCanvas">Gray Filter</canvas>   添加一段最简单的 ...

  8. HTML5 Canvas操作图像像素

    操作图像像素 如果要对图像进行进一步的处理,就可以先通过getImageData()方法获取图像像素,进行处理后再通过putImageData()方法,把处理后的像素重新绘制到画布中. 1)getIm ...

  9. java canvas旋转_在HTML5 Canvas上将图像旋转90度

    我无法使用HTML5画布旋转图像 . 我想我的数学错误,并希望得到任何帮助 . 在移动设备上,我在150px x 558px画布上捕获用户签名 . 我试图创建一个558像素×150像素的图像,这只是旋 ...

最新文章

  1. int long java_java long int的区别
  2. AutoLayout框架之序言
  3. POJ-1125 Stockbroker Grapevine 最短路
  4. r-studio扫描后各种颜色_iPhone手机备忘录,原来还隐藏着扫描仪,你不会还不知道吧?...
  5. truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程
  6. (01)JVM-内存三大核心区域以及分析
  7. prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」
  8. Android单元测试读写文件,xml-如何为android单元测试提供数据文件
  9. python查找当前路径,在Python中查找当前终端选项卡的当前目录
  10. 一、CI框架(CodeIgniter)简介
  11. QTP不识别树结构中的点击事件
  12. 运维,请警惕脚本灾难!
  13. javascript 正则表达式小案例
  14. 台达plc控制伺服电机编程实例_分享3个台达PLC控制伺服项目接线及程序案例
  15. c语言延时函数(c语言延时函数delay用法)
  16. 小程序如何发布体验版本
  17. 前端和后端哪个工资更高呢?
  18. 免费获得minecraft账号,快来试试!!!
  19. 一个无线遥控通讯协议破解实例
  20. 笔记本电脑右下角网络图标显示红叉

热门文章

  1. mate9 pro升android7.1,用了三年mate9突然换成mate30Pro是种怎样的体验?听老用户怎么说...
  2. rz后远程服务器没反应,Mac 链接远程服务使用 rz 服务卡死解决
  3. NVIDIA深度学习基础-理论与实践入门课程笔记及测验参考代码
  4. 树莓派安装 kodi 19.1
  5. 【面试-经验之谈】面霸是如何养成的,他的路子真的野
  6. 公网私网IP地址划分
  7. linux 查看文件 文件夹大小
  8. 未来的什么行业最赚钱?
  9. 录屏软件--ZD Soft Screen Recorder_8.0
  10. 电脑突然没有声音的解决方法