怎么把图片缩小但图案不变,怎么把图片缩小成固定大小

首页 > 经验 > 作者:YD1662022-10-31 16:59:16

基础部分坐标系

画布坐标、屏幕坐标的概念

几何变换:平移、缩放、旋转

canvas 中的所有几何变换针对的不是绘制的图形,而是针对画布本身,也就是说,当移动、缩放、旋转画布之后,新的坐标系只对新的操作生效

怎么把图片缩小但图案不变,怎么把图片缩小成固定大小(1)

参考:

绘图步骤基础绘图三步法
  1. 获取canvas对象
  2. 获取上下文环境对象context
  3. 开始绘制图形。

示例代码

const canvas = document.getElementById("canvas"); const context = convas.getContext("2d"); context.fillRect(100, 100, 50, 50); 通用绘图步骤

  1. 保存画布(状态),context.save();
  2. 画布操作,context.transform(叠加) 或者 context.setTransform(不叠加)
  3. 设置样式,绘制图形
  4. 恢复画布(状态),context.restore();

怎么把图片缩小但图案不变,怎么把图片缩小成固定大小(2)

图形变换基本操作
  1. 清空画布,context.clearRect
  2. 保存状态,context.save
  3. 画布操作,doTransform
  4. getShapeList and forEach
  5. 恢复状态,context.restore
Canvas性能

Canvas的绘制和html的绘制是不一样的,html的绘制是增量的,当变化时,只会重新绘制变化的部分,没有变化的部分是不会重新绘制的,但是canvas不一样,每次都是全量绘制的,如果一个canvas里有很多图形,当改变一个图形时,需要重新绘制所有图形才可以(当然,可以用clearRect擦除部分区域,但一般很少这么用)。

了解canvas的绘制规则之后,就很容易发现性能问题,如果canvas上绘制了大量的图形(成千上万个),每次重绘就需要很长的时间,如果重绘的频率很高,那么就会有性能问题

怎么把图片缩小但图案不变,怎么把图片缩小成固定大小(3)

那么如何解决这个问题呢,目前有以下几种方案

  1. 使用图层
  2. 使用临时图层
  3. 使用webworker或wasm
  4. 使用webgl
使用图层

图层的概念来自于PS,每一个图层都是一个canvas,既然在一个canvas上绘制太多图形会有性能问题,那么就分几个图层,每次仅重新绘制其中一个图层,每个图层的图形都不会很多,那么即使重绘的频率很高,也不会有性能问题。图层的概念图如下:

怎么把图片缩小但图案不变,怎么把图片缩小成固定大小(4)

首页 123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.