php - 如何使用 PHP 放大 SVG 并另存为 PNG,而不损失质量?

标签 php svg png imagick

我有一批 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/

相关文章:

javascript - 工具提示未显示 d3.js

android - 使用 Android 创建索引颜色 PNG

php - 面包屑未添加到缓存 View 中

php - 在 PHP for windows 上调用未定义的函数 mysqli_connect

xampp 上的 php exec 函数可以在 Windows 上工作,但不能在 Linux 上工作

react-native - React Native SVG 使用不受支持的 JSX 命名空间标签。如何将 throwIfNamespace 设置为 false?

image - svg 的路径不适用于 Gatsby 中的 img 标签

具有透明背景的PHP图像复制

r - 使用 PNG/JPEG 图像创建多面板图形

php - 将输出流式传输到文件和浏览器