使用图像填充矩形——在浏览器中有效,但不适用于 imagemagick convert
Fill rectangle using image -- works in browser but not with imagemagick convert
使用 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 进行了测试,一切正常:
接下来我使用 Imagemagick 渲染 svg,但填充没有缩放,而是平铺。
嗯,真奇怪。让我们看看它是 imagemagick 本身还是我的绘图代码。
convert image_33.svg image_png
如何使图案按比例缩放,而不是重复?这是imagemagick的缺陷吗?
使用:
转换--版本
版本:ImageMagick 6.7.9-10 2013-08-29 Q16 http://www.imagemagick.org
版权所有: 版权所有 (C) 1999-2012 ImageMagick Studio LLC
特点:OpenMP
安装和构建更新版本的 ImageMagick 解决了这个问题,但是我无法使用 RMagick 正确渲染。我不得不使用 convert
.
对我来说,使用 rsvg delegate 进行构建的正确方法是:
./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
使用 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 进行了测试,一切正常:
接下来我使用 Imagemagick 渲染 svg,但填充没有缩放,而是平铺。
嗯,真奇怪。让我们看看它是 imagemagick 本身还是我的绘图代码。
convert image_33.svg image_png
如何使图案按比例缩放,而不是重复?这是imagemagick的缺陷吗?
使用: 转换--版本 版本:ImageMagick 6.7.9-10 2013-08-29 Q16 http://www.imagemagick.org 版权所有: 版权所有 (C) 1999-2012 ImageMagick Studio LLC 特点:OpenMP
安装和构建更新版本的 ImageMagick 解决了这个问题,但是我无法使用 RMagick 正确渲染。我不得不使用 convert
.
对我来说,使用 rsvg delegate 进行构建的正确方法是:
./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