绘制文本

    window.onload = function () {//获取画布var canvas = document.querySelector('#test')//检查支持性if (canvas.getContext) {//获取画笔var ctx = canvas.getContext("2d")//文本水平垂直居中ctx.font = "60px impact"ctx.textBaseline = 'middle'var w = ctx.measureText('绘制文本').widthctx.fillText('绘制文本', (canvas.width - w) / 2, (canvas.height - 60) / 2)}}

渐变

    window.onload = function () {//获取画布var canvas = document.querySelector('#test')//检查支持性if (canvas.getContext) {//获取画笔var ctx = canvas.getContext("2d")//线性渐变// var gradient = ctx.createLinearGradient(0, 0, 400, 400)//径向渐变var gradient = ctx.createRadialGradient(200, 200, 80, 200, 200, 160)gradient.addColorStop(0, "red")gradient.addColorStop(0.5, "yellow")gradient.addColorStop(1, "blue")ctx.fillStyle = gradientctx.fillRect(0, 0, 400, 400)}}

使用图片

window.onload = function() {//获取画布var canvas = document.querySelector('#test')//检查支持性if (canvas.getContext) {//获取画笔var ctx = canvas.getContext("2d")ctx.translate(70, 100)var img = new Image()img.src = "test.png"img.onload = function() {draw()}function draw() {// ctx.drawImage(img, 0, 0, img.width, img.height)//插入图片//设置背景var pattern = ctx.createPattern(img, "no-repeat")ctx.fillStyle = patternctx.fillRect(0, 0, img.width, img.height)}}}

像素操作(实现马赛克)

  window.onload = function () {//获取画布var canvas = document.querySelector('#test')//检查支持性if (canvas.getContext) {//获取画笔var ctx = canvas.getContext("2d")var img = new Image()img.src = "test.png"img.onload = function () {canvas.width = img.width * 2canvas.height = img.heightdraw()}function draw() {ctx.drawImage(img, 0, 0) //插入图片//得到oldImgdata像素数据var oldImgdata = ctx.getImageData(0, 0, img.width, img.height)//创建一个创建一个newImageData对象var newImgdata = ctx.createImageData(img.width, img.height)//选出一个马赛克矩形var size = 4for (var i = 0; i < oldImgdata.width / size; i++) {for (var j = 0; j < oldImgdata.height / size; j++) {//从马赛克矩形中随机抽出一个像素点的信息(rgb)var color = getPxInfo(oldImgdata, i * size + Math.floor(Math.random() * size), j * size +Math.floor(Math.random() * size))//将整个马赛克矩形中的像素点信息统一调成随机抽出的像素点信息for (var a = 0; a < size; a++) {for (var b = 0; b < size; b++) {setPxInfo(newImgdata, i * size + a, j * size + b, color)}}}}ctx.putImageData(newImgdata, img.width, 0);}//获取单个像素点的信息function getPxInfo(imgdata, x, y) {var color = []var data = imgdata.datavar w = imgdata.widthcolor[0] = data[(y * w + x) * 4]color[1] = data[(y * w + x) * 4 + 1]color[2] = data[(y * w + x) * 4 + 2]color[3] = data[(y * w + x) * 4 + 3]return color}//设置单个像素点的信息function setPxInfo(imgdata, x, y, color) {var data = imgdata.datavar w = imgdata.widthdata[(y * w + x) * 4] = color[0];data[(y * w + x) * 4 + 1] = color[1];data[(y * w + x) * 4 + 2] = color[2];data[(y * w + x) * 4 + 3] = color[3];}}}

合成与裁剪

  • 全局透明度的设置:ctx.globalAlpha = value;
  • globalCompositeOperation
    • source:新的图像(源)
    • destination:已经绘制过的图形(目标)
    • ctx.globalCompositeOperation = type;
      • type:
        1.source-over:源在上面/destination-over:目标在上面
        2.source-in:重叠中源的部分/destination-in:重叠中目标的部分
        3.source-out:源超过目标的部分/destination-out:目标超过源的部分
        4.source-atop:砍掉源溢出的部分/destination-atop:砍掉目标溢出的部分

Canvas学习笔记及像素操作——实现马赛克相关推荐

  1. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  2. canvas学习笔记

    canvas学习笔记 canvas API中文网 - Canvas API中文文档首页地图 使用canvas来绘制图形 - Web API 接口参考 | MDN 什么是Canvas? Canvas是H ...

  3. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)

    OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...

  4. Canvas 学习笔记1

    #Canvas 学习笔记1 @[Canvas,Nunn,HTML5,javascript] ##前言 相信大家多多少少都有了解过`Canvas`,这里我就不多做解释了,网上也充斥了这方面的知识,很多人 ...

  5. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

  6. Canvas学习笔记之画线

    Canvas学习笔记之画线 步骤 1.使用getElementById()获取canvas元素. 2.获取canvas的绘制环境getContext(). 3.进行绘制画笔的粗细和颜色定义,分别是li ...

  7. NetLogo学习笔记3 —— 集合操作与生命游戏

    NetLogo学习笔记3 -- 集合操作与生命游戏 (这篇新知识点略多) 上一篇文章我们了解NetLogo模型的基本要素,学习了函数定义与ask语法.并编写了我们的第一个程序! 这一次,我们来编写一个 ...

  8. canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)...

    [下篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  9. opencv学习笔记之像素处理

    文章目录 前言 一.多通道的分离合并 多通道分离函数split() 多通道合并函数merge() 二.图像像素统计 计算图像的平均值和标准差 前言 记录opencv有关像素操作的一些函数和功能 一.多 ...

最新文章

  1. 剑指offer-----Python-----栈
  2. 学术新星畅谈计算机视觉科研之路:视觉研究已经成熟,跨学科方法成为趋势...
  3. BuckleScript 1.0发布,面向OCaml的开源JavaScript编译器
  4. python扫描端口脚本_Python端口扫描简单程序
  5. leader选举的源码分析-startLeaderElection
  6. 标准差、方差、协方差的区别
  7. Django中使用ajax技术概述
  8. string::size_type
  9. 查看、启动、关闭防火墙
  10. java map 教程_Map和Set
  11. 2016OSC源创会年终盛典-前端技术专场-阴明
  12. 串口UART学习笔记(一)
  13. Spring自学教程-AOP学习(五)
  14. Excel教程(8) - 财务函数
  15. unity 中的LayerMask用法
  16. uni-app微信小程序配置(三)
  17. lucene使用facet搜索
  18. 【问题解决】panic: qtls.ClientHelloInfo doesn‘t match goroutine 1 [running]: github.com/marten-seemann/qt
  19. TCP的三次握手和四次断开
  20. SafePoint是什么

热门文章

  1. 解析在线教育培训APP开发
  2. java图形界面编程视频,mysql数据库引擎面试
  3. oa系统云服务器租赁,新睿云小编手把手教您用云服务器安装办公OA系统
  4. oracle 热数据,ORACLE数据库热备份步骤解析
  5. 万测试验机软件,万测关注检查井盖质量检测
  6. java 生成图片验证码结合struts2使用
  7. FPGA 30 综合数字ADC /DAC 信号发送采集系统设计(综合项目设计)
  8. 关于AsyncHttpClient的cz.msebera.android.httpclient.Header
  9. 资深大牛带你了解源码!带你轻松理解Android-Hook机制,已开源
  10. 不想升级iOS 15系统?iPhone最新屏蔽iOS更新的方法