3

我有以下 svg 图像到 300 DPI 的 png 图像和 pdf 图像。

<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
 <defs>
  <filter height="200%" width="200%" y="-50%" x="-50%" id="svg_1_blur">
   <feGaussianBlur stdDeviation="10" in="SourceGraphic"/>
  </filter>
 </defs>
 <g>
  <title>Layer 1</title>
  <image filter="url(#svg_1_blur)" xlink:href="images/logo.png" id="svg_1" height="162.999996" width="223.999992" y="99" x="185"/>
  <text xml:space="preserve" text-anchor="middle" font-family="serif" font-size="24" id="svg_2" y="210" x="289" stroke-width="0" stroke="#000000" fill="#000000">sdfdsdsfsdf</text>
 </g>
</svg>

我想使用 PHP 执行此操作,并且我已将过滤器应用于图像的模糊过滤器,并且我想保留它。

我在 IE 中查看此图像时也遇到问题,因为它在 IE9 上没有显示模糊效果。有什么建议么?

4

2 回答 2

1

您可以使用 GD 的imagefilter生成类似的东西:

imagefilter($image_res, IMG_FILTER_GAUSSIAN_BLUR);

或者

imagefilter($image_res, IMG_FILTER_SMOOTH, (int) $levelOfSmoothness);

但是,对于更复杂的 svg,您将需要一个SVG 渲染器

编辑

或者,如果您对卷积矩阵有足够的了解:

$gaussian = array(array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0));
imageconvolution($image, $gaussian, 16, 0);
于 2012-10-23T14:12:42.940 回答
0

如果您有可能执行脚本(exec、popen 等),phantomjs使用 webkit(与 Chrome/Safari 相同)并且在所有主要平台上都可用。您无法比这更接近浏览器将呈现的内容。尝试这样的事情:

exec("phantomjs rasterize.js http://ariya.github.com/svg/tiger.svg tiger.png)";

不要忘记清理(文件名或路径中不允许转义路径和字符)您传递给 phantomjs 的参数(文件路径)。

于 2012-10-23T16:57:20.580 回答