2012-07-20 158 views
0

我正在使用以下脚本来生成SVG的扩展PNG版本。使用PHP将SVG转换为PNG

<img src="barrington.svg" width="418" height="188"/> //comparison 
<?php 
    $im = new Imagick(); 
    $im->setBackgroundColor(new ImagickPixel('transparent')); 
    $svg = file_get_contents("barrington.svg"); 
    $im->setresolution(144,144); 
    $im->readImageBlob($svg); 
    $im->setImageFormat("png32"); 
    echo '<img src="data:image/png32;base64,' . base64_encode($im) . '" />' 
?> 

当显示/比较相同尺寸的SVG版本时,PNG在图像的某些部分有锯齿状边缘。

(见的形象在这里:http://i.stack.imgur.com/WGKIH.png

我使用ImageMagick的(如果不是已经明显),并想解决这个问题。

编辑: 为了澄清,为我的目的,我需要一个PNG,而不是一个SVG。这不是修复浏览器兼容性问题。

+0

既然你要输出到浏览器,为什么你需要转换为PNG?浏览器应该完全正确地显示SVG,除了老版本的IE,它不管怎样都不会喜欢base64的'src ='data:...''格式。 – Spudley 2012-07-20 21:27:40

+0

这个脚本更多的是一个概念证明类型的东西。我最终的目标是创建一个基于用户偏好显示栅格化SVG的表单,并且可以下载。 – Steve 2012-07-20 21:36:30

+0

您是否能够在此获得解决方法。我有同样的问题?另外,我正在丢失一些svg文件的细节,同时转换为JPEG或PNG。 – noobcode 2012-12-31 07:14:10

回答

1

通常在setImageResolution和setResolution上存在混淆。所以你可能想尝试setImageResolution和setResolution,看看你的边缘问题是否得到纠正。根据我的理解,setResolution对于密度是正确的,但是您仍然要设置图像大小。加144可能没有足够高的密度。

如果不是,那么调整图像大小总是可能的。将图像放大2倍,然后调整大小。

+0

谢谢你的建议。我尝试了setResolution和setImageResolution,数字高达720.我可以看到小图像的改进。它确实有所改善,但没有注意到太多。我会尝试其他选项。 – noobcode 2012-12-31 09:54:37