是否可以使用图像而不是颜色“填充”HTML5画布上的形状?

我画了一堆形状(四角形以45度角切片)。我想能够用图像“填充”这些形状,而不是颜色。现在我有一句话说:

context.fillStyle = '#123456' // example fill color

我正在寻找的是像:

context.fillStyle = 'url(http://www.myimagereference.com/image.png)';

我知道我不能以这种方式使用fillStyle – 但是有另一种方式来实现这种事情吗?

解决方法

您可以通过定义与您的形状相同的 clipping region,然后使用drawImage()绘制到此区域来执行此操作;然后中风(只)你的路径在此之上。

我在我的网站上为你创建了一个这样的技术的例子:
http://phrogz.net/tmp/canvas_image_as_background_to_shape.html

以下是相关代码;它按比例缩放图像以填充您指定的宽度:

function clippedBackgroundImage( ctx,img,w,h ){
  ctx.save(); // Save the context before clipping
  ctx.clip(); // Clip to whatever path is on the context

  var imgHeight = w / img.width * img.height;
  if (imgHeight < h){
    ctx.fillStyle = '#000';
    ctx.fill();
  }
  ctx.drawImage(img,imgHeight);

  ctx.restore(); // Get rid of the clipping region
}

如果你想要平铺,不对称拉伸,低透明度着色等等,你可以修改它。这是你可以如何使用它:

function slashedRectWithBG( ctx,x,y,h,slash,img ){
  ctx.save(); // Save the context before we muck up its properties
  ctx.translate(x,y);
  ctx.beginPath();
  ctx.moveto( slash,0 );       //////////// 
  ctx.lineto( w,0 );          //         //
  ctx.lineto( w,h-slash );   //          //
  ctx.lineto( w-slash,h );    //          //
  ctx.lineto( 0,h );         //         //
  ctx.lineto( 0,slash );     ////////////
  ctx.closePath();
  clippedBackgroundImage( ctx,h );
  ctx.stroke();  // Now draw our path
  ctx.restore(); // Put the canvas back how it was before we started
}

请注意,当您创建图像传递给该功能时,您必须要set its onload handler before setting the src

var img = new Image;
img.onload = function(){
  // Now you can pass the `img` object to varIoUs functions
};
img.src = "...";

html5 – 图像作为绘制形状的“背景”的更多相关文章

  1. c – 在路径中解决“../”和“./”的“realpath”的替代方法

    realpath做我需要的,但只有在路径中的文件实际存在的情况下才起作用.我需要一个从字符串返回归一化路径的函数(例如../some/./directory/a/b/c/../d到some/directory/a/b/d),而不管目录/文件实际存在基本上等同于Windows上的PathCanonicalize.这样的功能是否已经存在?解决方法我不认为有任何标准库函数可用于此.您可以在Apacheh

  2. html5 – 图像作为绘制形状的“背景”

    我画了一堆形状。我想能够用图像“填充”这些形状,而不是颜色。现在我有一句话说:我正在寻找的是像:我知道我不能以这种方式使用fillStyle–但是有另一种方式来实现这种事情吗?解决方法您可以通过定义与您的形状相同的clippingregion,然后使用drawImage()绘制到此区域来执行此操作;然后中风(只)你的路径在此之上。

随机推荐

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  4. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  9. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

返回
顶部