在不更改字体的情况下将SVG转换为PNG

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不更改字体的情况下将SVG转换为PNG相关的知识,希望对你有一定的参考价值。

我正在尝试制作一个简单的应用程序,该应用程序从用户处获取文本并编辑svg文件中的文本(从Illustrator生成)并将最终结果发送回用户。

我能够在javascript中更改SVG文件文本,但我遇到将其转换为png的问题。当我这样做时,它会变为不同的roboto字体。

这是我的svg

<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2248.1 769.99">
    <defs>
        <style>
            .cls-1{
                font-size:350px;
                font-family:Granger-Regular, Granger;
            }
        </style>
    </defs>
    <title>test</title>
    <text class="cls-1" x="50%" y ="50%" >
        <tspan  text-anchor="middle">Example</tspan>
        <tspan  text-anchor="middle" x="50%" y ="50%" dy="300">SVG</tspan>
    </text>
</svg>

这是我用来转换的代码,

var fs = require('fs')
  , gm = require('gm');

gm('./../src/images/test.svg')
    .write('./../src/images/test.png', function (err) {
        //console.log(err)
        if (!err) console.log('done');
    });

Svg看起来像这样,

enter image description here

但是,当我转换它看起来像这样,enter image description here

那么我该如何解决呢? :(

答案

那些日子我有类似的东西,其中svg包括阿拉伯语排版,这不仅是从右到左书写,而且还有很多连字。我开始使用imagemagick。为了使用正确的字体,需要在要进行转换的系统上安装字体,在我们的例子中,它是Web服务器,我们无法安装字体。但在当地环境中,我注意到imagemagick无法很好地处理文本方向和连字,因此我们需要找到另一种解决方案。最终的赢家是apache batik project,它是用java实现的。在这种情况下我们很幸运,因为shell_exec('java -jar …')可能来自php方面。如果您进入项目的示例/测试目录,您可以找到使用外部字体的图形,通过@fontface {}指令包含。当使用蜡染时,做得很好,请记住所有路径都需要相对于svg本身。

以上是关于在不更改字体的情况下将SVG转换为PNG的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将字体转换为轮廓的情况下将 cairo-pdf 转换为 eps

如何在不损失质量的情况下将 PNG 转换为 BMP

Ubuntu 下将 svg 图片转换为其他格式 (如 png)

我可以在不更改项目顺序的情况下将 JSON 字符串转换为 Flex ArrayCollection 吗?

如何在不丢失科学记数法的情况下将列转换为单个管道分隔的列?

如何在不将图像保存在本地的情况下将捕获的图像(Surface View)传递给另一个片段?