Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP将SVG转换为PNG的粗糙边_Php_Svg_Imagemagick_Png_Edges - Fatal编程技术网

用PHP将SVG转换为PNG的粗糙边

用PHP将SVG转换为PNG的粗糙边,php,svg,imagemagick,png,edges,Php,Svg,Imagemagick,Png,Edges,我使用以下脚本生成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-&g

我使用以下脚本生成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在一些图像周围有锯齿状边缘

(见下图:)

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

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

一般来说,setImageResolution和setResolution存在混淆。因此,您可能希望尝试使用setImageResolution和setResolution,看看您的边缘问题是否得到纠正。据我所知,setResolution对于密度是正确的,但您仍然需要设置图像大小。加上144可能不够高


如果没有,则始终可以调整图像的大小。将图像放大2倍,然后调整大小。

既然要输出到浏览器,为什么需要转换为PNG?浏览器应该可以很好地显示SVG,除了旧版本的IE,它也不喜欢base64
src='data:…'
格式。这个脚本更像是一种概念验证类型的东西。我的最终目标是创建一个表单,该表单根据用户偏好显示光栅化SVG,并且可以下载。您是否能够找到解决方法。我也有同样的问题?另外,在转换为jpeg或png时,我丢失了svg文件的一些细节。谢谢你的建议。我尝试了setResolution和setImageResolution,数字高达720。我可以看到轻微的图像改进。它确实有所改善,但没有注意到太多。我会尝试其他选择。