粗糙边缘使用PHP将SVG转换为PNG


Rough Edges Converting SVG to PNG with 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在某些图像周围具有锯齿状边缘。

(请参见此处的图片:https://i.stack.imgur.com/WGKIH.png)

我正在使用ImageMagick(如果它还不明显的话),并希望解决这个问题。

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

通常在setImageResolution和setResolution上存在混淆。因此,您可能需要尝试setImageResolution和setResolution,看看您的边缘问题是否得到了纠正。根据我的理解,setResolution对于密度是正确的,但您仍然希望设置图像大小。加144的密度可能不够高。

如果没有,那么调整图像大小始终是可能的。将图像放大2倍,然后调整大小。