我有一批 SVG 图像,需要调整大小然后另存为 PNG,我想使用 PHP 来完成此操作。有人问过与我类似的问题,但没有一个解决方案对我有用。例如:
选项A:使用PHP更改SVG的宽度和高度属性。
A 的问题:这看起来工作正常,但实际上它只是增加了 Canvas 大小,而不是 Canvas 的内容。我不确定这是否重要,但我的 SVG 是使用 Illustrator 创建的小图形,主要由路径元素组成。
选项B:使用imagick调整大小并重新保存
示例:
$im = new Imagick();
$im->setResolution( $startResolution * ($newWidth / $oldWidth ), $startResolution * ($newHeight / $oldHeight ) );
$im->readImage( $svgSource );
$im->setImageFormat("png32");
echo '<img src="data:image/png;base64,' . base64_encode($im) . '" />';
B 的问题:这似乎也可以正常工作,但生成的 png 会模糊
选项 C:选项 B 的变体,您将分辨率设置得非常高,例如 5000,然后调整大小。
C 的问题:生成的 PNG 仍然模糊
选项 D:使用 exec(convert...) 来解决 PHP 的错误
D 的问题:你猜对了,生成的 PNG 仍然模糊
有没有人找到一种方法来实现这项工作?
最佳答案
对于选项A:
如果 svg 期望坐标系为创建时的坐标系(即原始宽度/高度),那么您将需要添加一个 viewBox
属性(使用 0 0 原始宽度 原始高度
)。然后,当您设置新的宽度和高度属性时,svg 应该正确地将自身重新调整为新的尺寸。
关于php - 如何使用 PHP 放大 SVG 并另存为 PNG,而不损失质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171719/