tech share
  • tech-share
  • Engineering
    • 登录鉴权
    • SSR 页面路由
    • npm 版本号
    • 缓存
    • 数据库容灾
    • 动态效果导出 gif
    • Chrome-devtools
    • C 端 H5 性能优化
    • Docker
    • Monorepo 最佳实践
    • 技术架构演化
    • 项目规范最佳实践
    • snowpack
    • 静态资源重试
    • 前端页面渲染分析
    • Git
    • 前端重构
    • 微前端
    • 项目依赖分析
    • 前端监控原理
    • webpack
    • BS 架构与 CS 架构
    • HTTPS
    • package-lock.json 生成逻辑
    • SVN(Subversion)
    • 数据库分类
    • gulp
    • 前端架构
    • Bundle & Bundless
    • 控制反转 IoC
  • JavaScript
    • Javascript 性能
    • JavaScript 原型(2) - 原型与原型链
    • JavaScript 原型(1) - 构造函数
    • JavaScript - Promise
    • ES6 解构赋值
    • 前端离线化
    • Proxy
    • Object.defineProperty()简介
    • TypeScript
  • MachineLearning
    • GAN生成对抗网络
    • 虚拟对抗训练
    • 深度度量学习
    • 原型网络
    • PyTorch优化器
    • 隐马尔可夫模型2
    • Shapley Value 算法
    • Embarassingly Autoencoder算法
    • AutoRec算法及其后续发展
    • 深度学习常用激活函数
    • 序列预测ConvTran算法
    • 联邦学习
    • 深度学习推荐系统算法整理
    • 隐马尔可夫模型
    • 黎曼优化方法
    • FM算法
    • 机器学习常见评价指标
    • VAE算法
    • Adam优化器详解
    • Transformer算法
    • Self-attention 推荐算法
    • CNN 卷积神经网络
    • 图嵌入
    • 集成学习算法
    • RecBole开源框架
    • NCE-PLRec
    • 深度学习初始化方法
    • RNN循环神经网络
    • PyTorch数据处理
    • PyTorch安装和基本操作
    • XGBoost算法
    • NCF算法与简单MF的对比
    • 计算最佳传输
  • CSS
    • 什么是BFC
    • 纯CSS实现可拖动布局
    • 滚动穿透解决方案
  • React
    • React 生命周期
    • React Ref
    • React Hooks
    • SWR
    • React 数据流
    • React 函数式组件和类组件的区别
  • 可视化
    • OffscreenCanvas
    • Echarts 平滑曲线端点为什么不平滑
    • 颜色空间
    • 词云布局解析
    • 3D 数学基础
    • Canvas 图片处理
    • GLGL ES
    • WebGL 中绘制直线
    • Graphics API
    • 现代计算机图形学基础
    • Canvas 灰度
  • Vue
    • Vue2.x全局挂载整理
    • Vue2.6.x源码阅读
      • Vue2.6.x源码阅读 - 2.目录结构分析
      • Vue2.6.x源码阅读 - 4.源码阅读-platform
      • Vue2.6.x源码阅读 - 1.准备工作
      • Vue2.6.x源码阅读 - 5.源码阅读-core-Vue构造函数
      • Vue2.6.x源码阅读 - 7.源码阅读-core-响应式原理
      • Vue2.6.x源码阅读 - 3.源码阅读-shared
      • Vue2.6.x源码阅读 - 6.源码阅读-core-组件挂载
    • Vue + TypeScript Web应用实践
    • Vue2.x指令
    • nextTick()的使用
    • vue-cli2.x 的使用与项目结构分析
    • Vue响应式原理及总结
    • VueX的使用
    • Electron-Vue + Python 桌面应用实践
    • Vite
    • Vue组件通信整理
    • 记录一个问题的探索过程
  • Linux
    • memcg
  • GameDev
    • 游戏中的几种投影视图
    • 从零开始写软渲染器06
    • 从零开始写软渲染器05
    • 从零开始写软渲染器04
    • 从零开始写软渲染器03
    • 从零开始写软渲染器02
    • 从零开始写软渲染器01
    • 从零开始写软渲染器00
    • 现代游戏常用的几种寻路方案(一)
  • Node
    • NPM Dependency
    • Node 优势
    • Node Stream
    • Node 模块系统
  • HTML
    • html5语义与结构元素
  • 跨端
    • Flutter 介绍
  • Golang
    • Golang 基础
  • AR
    • SceneKit
由 GitBook 提供支持
在本页
  • Canvas 可处理的图片源
  • Canvas 图片 API
  • drawImage
  • 变形
  • 缩放/裁切
  • 旋转
  • 图片效果
  • 反色
  • 去色
  • 单色
  • 二值处理

这有帮助吗?

  1. 可视化

Canvas 图片处理

Canvas 可处理的图片源

  1. 通过 Image()创建的对象

  2. 通过 ImageBitmap()创建的对象

  3. dom 元素

  4. dom 元素

  5. dom 元素

Canvas 图片 API

drawImage

获取到图片源后,可以调用这个方法将图片源绘制到 canvas 中

  • drawImage(image, x, y)

image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。

  • rotate

用于以原点为中心旋转 canvas 画板

  • ImageData

ImageData 对象中存储着 canvas 对象真实的像素数据,它包含以下几个只读属性:

width: 图片宽度,单位是像素 height: 图片高度,单位是像素 data: Uint8ClampedArray 类型的一维数组,包含着 RGBA 格式的整型数据,范围在 0~255

变形

缩放/裁切

  • 缩放 drawImage(image, x, y, width, height)

width 和 height,这两个参数用来控制 当向 canvas 画入时应该缩放的大小

  • 切片 drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

sx, sy, sWidth, sHeight 是图片源的坐标/宽高信息

dx, dy, dWidth, dHeight 是绘制到 canvas 的坐标/宽高信息

旋转

// 将参照点移动到画板的中心点;
ctx.translate(ctx.width / 2, ctx.height / 2);
// 旋转画板;
ctx.rotate = 90;
// 绘制图片;
ctx.drawImage(img);

图片效果

反色

反色即对每个像素点进行如下操作,公式:

b = 255 - a;

JS 代码

const imageData = cxt.getImageData(0, 0, canvas.width, canvas.height);
const imageData_length = imageData.data.length / 4; //一个像素点用4位:r,g,b,a
// 解析之后进行算法运算
for (let i = 0; i < imageData_length; i++) {
  imageData.data[i * 4] = 255 - imageData.data[i * 4];
  imageData.data[i * 4 + 1] = 255 - imageData.data[i * 4 + 1];
  imageData.data[i * 4 + 2] = 255 - imageData.data[i * 4 + 2];
}
cxt.putImageData(imageData, 0, 0);

去色

去色即将彩色图片变成黑白图片

公式:

Gray = Red * 0.3 + Green * 0.59 + Blue * 0.11;

JS 代码

const imageData = cxt.getImageData(0, 0, canvas.width, canvas.height);
const imageData_length = imageData.data.length / 4;
// 解析之后进行算法运算
for (let i = 0; i < imageData_length; i++) {
  const red = imageData.data[i * 4];
  const green = imageData.data[i * 4 + 1];
  const blue = imageData.data[i * 4 + 2];
  const gray = 0.3 * red + 0.59 * green + 0.11 * blue;
  imageData.data[i * 4] = gray;
  imageData.data[i * 4 + 1] = gray;
  imageData.data[i * 4 + 2] = gray;
}
cxt.putImageData(imageData, 0, 0);

单色

单色处理即将图片变为纯 red/green/blue 的纯色图,操作即将其余两色位 置为 0

二值处理

二值处理是非纯黑即纯白,在验证码 ocr 时,常用二值处理先处理,再将图片进行 ocr

算法是给定一个设置值,如果进行去色处理的结果高于这个值,就将颜色设为 255,否则设为 0

上一页3D 数学基础下一页GLGL ES

最后更新于4年前

这有帮助吗?