HTML5 <canvas>元素上像素之间的网格线

找到b

学习JS时,我正在做一个简单的像素艺术程序,就像一个有趣的项目一样。我想让画布上的每个像素都被1px边框包围。我唯一的想法是创建一个覆盖网格并调整其大小以适合画布像素。如:

<div 
  class="grid" 
  style="width: (canvas width); height: (canvas height); background-image: (transparent image with 1px border); background-size: (size of each canvas pixel); pointer-events: none;"
></div>
<br>

并将其放在画布上。

盲人67

使用许多内存画布作为图层

最简单的方法是将图形保留在单独的画布上。仅将主画布用作最终显示。

将绘图与显示画布分开后,即可开始对视觉效果FX进行分层。

复制图像(画布,jpeg,png等)

要勾勒出像素艺术图像,请创建图像的可绘制副本。

function copyImage(image){
    const copy = document.createElement("canvas");
    copy.width = image.width;
    copy.height = image.height;
    copy.ctx = copy.getContext("2d");
    copy.ctx.drawImage(image);
    return copy;
}

创建空白画布层

function createImage(w, h){
    const img = document.createElement("canvas");
    img.width = w;
    img.height = h;
    img.ctx = img.getContext("2d");
    return img;
}

轮廓层

将该副本画在其自身左侧1个像素,右侧1个像素,上方1个像素和下方1个像素上。然后设置出线颜色

function outlineLayer(image, color) {
    const ctx = image.ctx;
    ctx.globalCompositeOperation = "source-over";
    ctx.drawImage(image, -1,  0);
    ctx.drawImage(image,  1,  0);
    ctx.drawImage(image,  0, -1);
    ctx.drawImage(image,  0,  1);

    ctx.fillStyle = color;
    ctx.globalCompositeOperation = "source-atop";
    ctx.fillRect(0,0, image.width, image.height);

    ctx.globalCompositeOperation = "source-over";
}

渲染图

渲染图像时,首先在图像之前绘制轮廓层。

使用以上功能

// ctx is the context of the visual (on page) canvas
// myArt is a drawing. It is a canvas that is kept in memory and not on the page.
const outline = copyImage(myArt);
outlineLayer(outline, "black");

// then draw both on the main canvas
// First outline
ctx.drawImage(outline, 0, 0);
// then the pixels
ctx.drawImage(myArt, 0, 0);

折叠层

您还可以折叠图层以使轮廓永久

ctx.globalCompositeOperation = "destination-over";
myArt.ctx.drawImage(outline, 0, 0);
ctx.globalCompositeOperation = "source-over"; // restore default




 

   

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HTML5 Canvas绘制点之间的线距

来自分类Dev

检查HTML5 Canvas上的像素是否为黑色

来自分类Dev

HTML5 Canvas:用交叉线替换光标

来自分类Dev

多个html5 canvas元素:性能问题?

来自分类Dev

使用JavaScript克隆并单击移动的HTML5 Canvas元素

来自分类Dev

在HTML5中使用canvas元素

来自分类Dev

HTML5 canvas禁用基元上的抗锯齿(曲线,...)

来自分类Dev

iOS HTML5 Canvas在draw / clearRect上的问题

来自分类Dev

在HTML5 <canvas>上从不同的角度绘制模型

来自分类Dev

在HTML5 Canvas上绘制并获取坐标

来自分类Dev

HTML5 Canvas JS上的冲突检测

来自分类Dev

HTML5 canvas禁用基元上的抗锯齿(曲线,...)

来自分类Dev

在iPhone上播放HTML5 Canvas动画onClick或onTouchEnd

来自分类Dev

iOS HTML5 Canvas在draw / clearRect上的问题

来自分类Dev

在 HTML5 Canvas 上填充非矩形

来自分类Dev

HTML5 canvas javascript

来自分类Dev

HTML5 canvas javascript

来自分类Dev

通过HTML5 Canvas Context缩放并在给定图像上绘制网格

来自分类Dev

通过HTML5 Canvas Context缩放并在给定图像上绘制网格

来自分类Dev

HTML5 Canvas的getImageData值像素颜色闪烁白色和黑色

来自分类Dev

Animate CC HTML5/Canvas 使用动作脚本控制嵌套的 MovieClip 时间线

来自分类Dev

基于六边形网格的html5 / canvas游戏框架

来自分类Dev

基于六边形网格的html5 / canvas游戏框架

来自分类Dev

在HTML5 canvas中,translate()和moveTo()JavaScript函数之间有什么区别?

来自分类Dev

在HTML5 Canvas中的两个或多个对象之间应用重力

来自分类Dev

HTML5 Canvas,如何显示两点之间的动画攻击

来自分类Dev

HTML5 Canvas-如何在画布上的图像上绘制矩形

来自分类Dev

流星:如何获取HTML5 Canvas元素的上下文

来自分类Dev

在Kinetic.js中动态创建的HTML5 canvas元素失败,并拖拽:true

Related 相关文章

  1. 1

    HTML5 Canvas绘制点之间的线距

  2. 2

    检查HTML5 Canvas上的像素是否为黑色

  3. 3

    HTML5 Canvas:用交叉线替换光标

  4. 4

    多个html5 canvas元素:性能问题?

  5. 5

    使用JavaScript克隆并单击移动的HTML5 Canvas元素

  6. 6

    在HTML5中使用canvas元素

  7. 7

    HTML5 canvas禁用基元上的抗锯齿(曲线,...)

  8. 8

    iOS HTML5 Canvas在draw / clearRect上的问题

  9. 9

    在HTML5 <canvas>上从不同的角度绘制模型

  10. 10

    在HTML5 Canvas上绘制并获取坐标

  11. 11

    HTML5 Canvas JS上的冲突检测

  12. 12

    HTML5 canvas禁用基元上的抗锯齿(曲线,...)

  13. 13

    在iPhone上播放HTML5 Canvas动画onClick或onTouchEnd

  14. 14

    iOS HTML5 Canvas在draw / clearRect上的问题

  15. 15

    在 HTML5 Canvas 上填充非矩形

  16. 16

    HTML5 canvas javascript

  17. 17

    HTML5 canvas javascript

  18. 18

    通过HTML5 Canvas Context缩放并在给定图像上绘制网格

  19. 19

    通过HTML5 Canvas Context缩放并在给定图像上绘制网格

  20. 20

    HTML5 Canvas的getImageData值像素颜色闪烁白色和黑色

  21. 21

    Animate CC HTML5/Canvas 使用动作脚本控制嵌套的 MovieClip 时间线

  22. 22

    基于六边形网格的html5 / canvas游戏框架

  23. 23

    基于六边形网格的html5 / canvas游戏框架

  24. 24

    在HTML5 canvas中,translate()和moveTo()JavaScript函数之间有什么区别?

  25. 25

    在HTML5 Canvas中的两个或多个对象之间应用重力

  26. 26

    HTML5 Canvas,如何显示两点之间的动画攻击

  27. 27

    HTML5 Canvas-如何在画布上的图像上绘制矩形

  28. 28

    流星:如何获取HTML5 Canvas元素的上下文

  29. 29

    在Kinetic.js中动态创建的HTML5 canvas元素失败,并拖拽:true

热门标签

归档