在svg上面有真实的图像

时间:2017-12-08 15:55:14

标签: javascript css svg

我正在研究代表农民田地的svg矩形。是否有可能在其上有一个字段的图像,只是为了给它一个真正的感觉和视图。 这是一个矩形

的示例代码
<!DOCTYPE html>
 <html>
 <body>

<svg width="400" height="110">
<rect width="300" height="100" style="fill:green; stroke: black; stroke-width:3;" />
</svg>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

我使用clipPath剪切并将图片放在一个矩形中。

<svg width="600" height="200" viewBox="0 0 600 200" > 
<defs>
<clipPath id="field">
 <rect x="25" y="5" width="550" height="190" rx="25" ry="25" style="fill:none; stroke: black; stroke-width:1;" />
 </clipPath>
</defs>
<image xlink:href=" https://i.stack.imgur.com/MJkK0.jpg" width="600" height="200" clip-path="url(#field)" />
</svg>

如果您想使用不同的边框形式而不是矩形(例如圆形),那么这很容易做到,用clipPath中的圆圈替换矩形。

选项,正如Paulie_D所建议的那样,但它需要一点改进

如果图片周围需要一个框架,则需要添加第二个带边框的透明矩形

<rect width="300" height="100" style="fill:none; stroke: black; stroke-width:3;" />

<svg width="400" height="110"> 

<defs>
  <pattern id="field" patternUnits="userSpaceOnUse" width="300" height="100">
    <image xlink:href=" https://i.stack.imgur.com/MJkK0.jpg" x="-20" y="0" width="350" height="130" />
  </pattern>
</defs>
<rect width="300" height="100"  fill="url(#field)" /> 
<rect width="300" height="100" style="fill:none;  stroke: black; stroke-width:3;" /> 
</svg>

更新

黑框看起来很严峻,让我们用阴影替换它。

要创建阴影,请使用高斯滤镜,模糊底部矩形的边缘

<filter id="filtershadow" width="120%" height="120%">
      <feGaussianBlur in="SourceAlpha" stdDeviation="4"/> 
</filter>    

<body>  
 <svg width="400" height="110"> 

<defs>

  <filter id="filtershadow" width="120%" height="120%">
      <feGaussianBlur in="SourceAlpha" stdDeviation="4"/> 
</filter>
  <pattern id="field" patternUnits="userSpaceOnUse" width="300" height="100">
    <image xlink:href=" https://i.stack.imgur.com/MJkK0.jpg" x="0" y="0" width="350" height="130" />
  </pattern>
</defs>
<rect class="rect-shadow" x="10" y="14" width="290" height="90" filter="url(#filtershadow)" style="fill:black; " /> 
 <rect width="300" height="100"  fill="url(#field)" /> 

</svg>

</body>