使用图像填充矩形 - 在浏览器中工作,但不与imagemagick转换

时间:2015-09-08 02:36:15

标签: svg imagemagick rmagick

使用SVG,我需要根据用户在运行时做出的选择来填充带有图像或渐变的矩形。我的渐变填充效果很好,这是我遇到问题的图像填充。

在SO上,在整个网络上,我发现要使用图像填充矩形,我必须使用一个模式。所以我实现了这个:

<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   width="107.25"
   height="237.0"
   viewBox="0 0 80 190"
   id="svg2"
   version="1.1"
   style="display:inline">
  <defs id="defs4">
    <pattern id='glassbkg' patternUnits='objectBoundingBox' width='100%' height='100%'>
       <image xlink:href='http://glass.snowmoonsoftware.com/system/door_glasses/photos/1/original_21x65.png' height='100%' width='100%' preserveAspectRatio='none' />
    </pattern>
  </defs>
  <g id="layer1" transform="translate(0,-862.36218)">
    <rect
       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;st\
roke-dasharray:none"
       id="rect2987"
       width="79"
       height="189.00005"
       x="0.50000006"
       y="862.86218" />
  </g>
  <g id="layer3" style="display:inline">
    <rect
       style="fill:none;stroke:#808080;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
       id="rect3800"
       width="51"
       height="155"
       x="14.5"
       y="14.5" />
    <rect
       style="fill:url(#glassbkg);fill-opacity:1;stroke:#808080;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:non\
e"
       id="rect3800-3"
       width="47"
       height="151"
       x="16.5"
       y="16.5" />
  </g>
</svg>

并通过在浏览器中呈现svg进行测试,一切都很好:

Good render - screenshot

接下来我使用Imagemagick渲染svg,但填充没有缩放,它是平铺的。

嗯,这很奇怪。让我们看看它是imagemagick正确还是我的绘图代码。

convert image_33.svg image_png tiled background

如何让模式扩展,不重复?这是imagemagick的缺陷吗?

使用: 转换 - 版本 版本:ImageMagick 6.7.9-10 2013-08-29 Q16 http://www.imagemagick.org 版权:版权所有(C)1999-2012 ImageMagick Studio LLC 功能:OpenMP

1 个答案:

答案 0 :(得分:0)

安装和构建较新版本的ImageMagick解决了这个问题,但是我无法使用RMagick正确渲染。我不得不使用convert

使用rsvg委托构建的正确咒语对我来说是: ./configure --with-librsvg --with-svg --with-modules -enable-delegate-build --prefix=/usr

Version: ImageMagick 6.9.2-1 Q16 x86_64 2015-09-21 http://www.imagemagick.org Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC License: http://www.imagemagick.org/script/license.php Features: Cipher DPC Modules OpenMP Delegates (built-in): bzlib djvu fontconfig freetype gvc jbig jng jpeg lcms lqr ltdl lzma openexr png tiff wmf x xml zlib