我有一个HTML格式的SVG文件,我听说过的一件事是,当你放大它时,它不会完全像素化。

我知道jpeg或任何我可以将它存储为50 * 50的图标,然后实际显示为(相当像素化)100 * 100的缩略图(或10 * 10),通过手动设置image_src标签的高度和宽度。

然而,SVG文件似乎是与object/embed标签一起使用的,改变这些标签的高度或宽度只会导致为图片分配更多的空间。

有什么方法可以指定您想要SVG图像显示的比它实际存储在文件系统中的更小或更大?


当前回答

用文本编辑器打开你的.svg文件(它只是XML),在顶部寻找如下内容:

<svg ... width="50px" height="50px"...

擦除宽度和高度属性;默认值是100%,所以它应该扩展到容器允许的任何值。

其他回答

改变容器的宽度也可以修复它,而不是改变源文件的宽度和高度。

.SvgImage img{ width:80%; }

这修复了我重新调整svg大小的问题。您可以根据您的要求给出任何%。

使用以下代码:

<g transform="scale(0.1)">
...
</g>

用文本编辑器打开你的.svg文件(它只是XML),在顶部寻找如下内容:

<svg ... width="50px" height="50px"...

擦除宽度和高度属性;默认值是100%,所以它应该扩展到容器允许的任何值。

我发现最好添加viewBox和preserveAspectRatio属性到我的svg。视图框应该以0 0 w h的形式描述SVG的全宽和高:

<svg preserveAspectRatio="xMidYMid meet" viewBox="0 0 700 550"></svg>

下面是一个使用svg.getBox()获取边界的例子: https://gist.github.com/john-doherty/2ad94360771902b16f459f590b833d44

最后,您将得到可以插入svg以正确设置视图框的数字。然后在父div上使用任何css,你就完成了。

 // get all SVG objects in the DOM
 var svgs = document.getElementsByTagName("svg");
 var svg = svgs[0],
    box = svg.getBBox(), // <- get the visual boundary required to view all children
    viewBox = [box.x, box.y, box.width, box.height].join(" ");

    // set viewable area based on value above
    svg.setAttribute("viewBox", viewBox);