如何在Konvajs中向Konva.Image()对象添加纹理?

拉米·马布鲁克

我已经按照这篇文章的答案了;用纹理图案填充图像,并且效果很好。

有没有办法对KonvaJS做同样的事情

品牌

AFAIK,KonvaJS尚不支持创建纹理叠加所需的合成。但是,aKonva.Image可以将本地html5 canvas元素作为其图像源,因此只需在html5 canvas元素上进行覆盖,然后将其提供给Konva:var textureImage = new Konva.Image({ image:myCanvasElement })

带注释的示例代码和一个演示:

关于Microsoft:需要Edge-IE不允许合成

var stage;

// Attributions of code that applies textures using compositing: 
// Indirectly from your SO Q&A: http://stackoverflow.com/questions/36097859/add-texture-to-image-object-in-konvajs
// Directly from this SO Q&A: http://stackoverflow.com/questions/28545747/fill-image-with-texture-pattern/28552076#28552076
// image loading for demo (ignore)
var img1 = new Image;
var img2 = new Image;
var cnt = 2;
img1.onload = img2.onload = function() {
  if (!--cnt) go()
};
img1.src = "http://i.imgur.com/8WqH9v4.png"; // sofa
img2.src = "http://i.stack.imgur.com/sQlu8.png"; // pattern
//
function createCompositedCanvas(img1, img2) {
    // create canvas
    canvas = document.createElement("canvas"),
      ctx = canvas.getContext("2d");
    canvas.width = img1.width;
    canvas.height = img1.height;
    // create a pattern  
    ctx.fillStyle = ctx.createPattern(img2, "repeat");
    // fill canvas with pattern
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    // use blending mode multiply
    ctx.globalCompositeOperation = "multiply";
    // draw sofa on top
    ctx.drawImage(img1, 0, 0, img1.width * .5, img1.height * .5);
    // change composition mode (blending mode is automatically set to normal)
    ctx.globalCompositeOperation = "destination-in";
    // draw to cut-out sofa
    ctx.drawImage(img1, 0, 0, img1.width * .5, img1.height * .5);
    //
    document.body.appendChild(canvas);
    return (canvas);
  }
  // end attibuted code


function go() {
  // create stage
  stage = new Konva.Stage({
    container: 'container',
    width: img1.width,
    height: img1.height
  });
  var layer = new Konva.Layer();
  stage.add(layer);
  // create composited canvas
  var canvas = createCompositedCanvas(img1, img2);
  // use the in-memory canvas as an image source for Konva.Image
  var img = new Konva.Image({
    x: -200,
    y: -50,
    image: canvas,
    draggable: true
  });
  layer.add(img);
  layer.draw();
}
body{padding:20px;}
#container{
  border:solid 1px #ccc;
  margin-top: 10px;
}
canvas{border:solid 1px red;}
<script src="https://cdn.rawgit.com/konvajs/konva/0.9.0/konva.min.js"></script>
<div id="container"></div>
<h4>Native canvas element used to do compositing</h4>

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在OpenGL(2.1)中向顶点缓冲对象添加纹理

来自分类Dev

使用PyOpenGL向不同的对象添加不同的纹理

来自分类Dev

如何在konvajs.image源中添加base64图像

来自分类Dev

如何在Rcpp中向对象添加多个类?

来自分类Dev

如何在JavaScript中向数组添加新对象(键值对)?

来自分类Dev

如何在fabricJS中向圆形对象添加文本?

来自分类Dev

如何在Cloud Firestore中向对象添加新属性

来自分类Dev

如何在Coffeescript中向现有对象添加方法?

来自分类Dev

如何在Unity 5中向对象添加物理

来自分类Dev

如何在PlaneGeometry中添加纹理

来自分类Dev

ARKit - 在场景编辑器中为对象添加纹理

来自分类Dev

如何在 angularfire 2 版本 5 中向添加到节点的对象添加键

来自分类Dev

three.js:在着色器材质中使用纹理添加到对象加载器加载的对象中

来自分类Dev

如何在 Java (Android) 中为位图添加纹理

来自分类Dev

如何使用x3d在一个对象中添加镜面贴图,凹凸贴图和颜色纹理?

来自分类Dev

如何在结构中嵌入CUDA纹理对象?

来自分类Dev

如何在OpenGL中在对象上放置纹理?

来自分类Dev

如何在Swift中的Alert中向按钮添加操作

来自分类Dev

如何在没有循环的情况下向Javascript数组中的每个对象添加字段?

来自分类Dev

如何在Node.JS中向响应对象添加自定义函数

来自分类Dev

如何在Js中向所有树数组对象添加项目?

来自分类Dev

如何在Realm .NET中向现有RealmObject模型对象添加带PrimaryKey注释的属性?

来自分类Dev

如何在Angular(打字稿)中向JSON对象添加新的键数组?

来自分类Dev

如何在Node.js中向JSON,Date或其他“本机”对象全局添加方法?

来自分类Dev

如何在Swift中向自定义对象数组添加元素

来自分类Dev

VB.NET-如何在linq中向类对象添加自定义方法?

来自分类Dev

如何在JavaScript中在运行时中向对象添加/删除属性

来自分类Dev

如何在asp.net mvc中向现有的类或对象添加新类型

来自分类Dev

如何在脚本中向游戏对象添加渲染器?

Related 相关文章

  1. 1

    如何在OpenGL(2.1)中向顶点缓冲对象添加纹理

  2. 2

    使用PyOpenGL向不同的对象添加不同的纹理

  3. 3

    如何在konvajs.image源中添加base64图像

  4. 4

    如何在Rcpp中向对象添加多个类?

  5. 5

    如何在JavaScript中向数组添加新对象(键值对)?

  6. 6

    如何在fabricJS中向圆形对象添加文本?

  7. 7

    如何在Cloud Firestore中向对象添加新属性

  8. 8

    如何在Coffeescript中向现有对象添加方法?

  9. 9

    如何在Unity 5中向对象添加物理

  10. 10

    如何在PlaneGeometry中添加纹理

  11. 11

    ARKit - 在场景编辑器中为对象添加纹理

  12. 12

    如何在 angularfire 2 版本 5 中向添加到节点的对象添加键

  13. 13

    three.js:在着色器材质中使用纹理添加到对象加载器加载的对象中

  14. 14

    如何在 Java (Android) 中为位图添加纹理

  15. 15

    如何使用x3d在一个对象中添加镜面贴图,凹凸贴图和颜色纹理?

  16. 16

    如何在结构中嵌入CUDA纹理对象?

  17. 17

    如何在OpenGL中在对象上放置纹理?

  18. 18

    如何在Swift中的Alert中向按钮添加操作

  19. 19

    如何在没有循环的情况下向Javascript数组中的每个对象添加字段?

  20. 20

    如何在Node.JS中向响应对象添加自定义函数

  21. 21

    如何在Js中向所有树数组对象添加项目?

  22. 22

    如何在Realm .NET中向现有RealmObject模型对象添加带PrimaryKey注释的属性?

  23. 23

    如何在Angular(打字稿)中向JSON对象添加新的键数组?

  24. 24

    如何在Node.js中向JSON,Date或其他“本机”对象全局添加方法?

  25. 25

    如何在Swift中向自定义对象数组添加元素

  26. 26

    VB.NET-如何在linq中向类对象添加自定义方法?

  27. 27

    如何在JavaScript中在运行时中向对象添加/删除属性

  28. 28

    如何在asp.net mvc中向现有的类或对象添加新类型

  29. 29

    如何在脚本中向游戏对象添加渲染器?

热门标签

归档