在创建时自动缩放SVG

时间:2014-04-15 01:37:14

标签: image svg imagemagick ghostscript

目前我正在使用此命令生成SVG:

gs -sDEVICE=svg -dNOCACHE -sOutputFile="photo.svg" -q -dbatch -dNOPAUSE "photo.pdf.out" -c quit

我想将图像的大小加倍。使用GS的-r-g选项只会给我相同的图像。我不确定在SVG设备的GS中是否支持这些选项。

我尝试使用ImageMagick的convert来绕过ghostscript但是当我在浏览器中查看图像时,它会将SVG显示为代码。

原始图片是裁剪的PDF。我尝试直接缩放,但没有得到高质量的图像,可能是由于我在ImageMagick中没有标记的选项。

1 个答案:

答案 0 :(得分:2)

我无法帮助你处理你的Ghostscript查询(它看起来像-r和-g只能在渲染为位图时应用),但我可以给你一个关于如何使用SVG输出的提示。

选项1

您可以使用CSS扩展SVG。例如:style="transform: scale(4);"。但这可能不适用于所有浏览器。

选项2

您可以调整SVG标题,使其在渲染时显示更大。为此,您需要向SVG添加viewBox属性。由于SVG的尺寸以点(“pt”)表示,因此这一步很复杂。而viewBox尺寸以CSS像素表示。一点是1/72英寸。而CSS像素是1/96英寸。

无论如何,viewBox属性描述了SVG内容的边界,格式为"<minX> <minY> <width> <height>"

对于你的文件,

minX和minY可能都是0。对于宽度和高度,我们需要将指定的宽度和高度从<svg>转换为默认坐标空间。

在您的示例中,宽度为“5pt”。转换为CSS像素,这是5 * 96/72 = 6.6666。

高度为“13pt”,转换为(13 * 96/72)= 17.3333。

因此我们的viewBox变为"0 0 6.6666 17.3333"

<svg xmlns='http://www.w3.org/2000/svg' version='1.1'
     width='5pt' height='13pt' viewBox="0 0 6.6666 17.3333">
    <ellipse cx="2.5pt" cy="6.5pt" rx="2.5pt" ry="6.5pt" fill="green" />
</svg>

但是这不会渲染得更大,因为viewBox的大小与旧的宽度和高度相同。要使其渲染得更大,您现在可以增加宽度和高度属性。

例如,为了使它大四倍,宽度和高度翻两番,如下所示:

<svg xmlns='http://www.w3.org/2000/svg' version='1.1'
     width='20pt' height='52pt' viewBox="0 0 6.6666 17.3333">
    <ellipse cx="2.5pt" cy="6.5pt" rx="2.5pt" ry="6.5pt" fill="green" />
</svg>

Demo here

如果要填充浏览器窗口,请将宽度和高度设置为100%。或者删除它们,这是相同的,因为它们默认为。

Demo here

希望这有帮助。