我正在开发一个程序,可以根据用户的选择生成svg文件。其中一个选择是在第一个特定点上包含另一个svg文件。第二个文件具有未知的宽高比和大小,但它应该按比例缩放到特定的最大大小,不管是作为高度还是宽度,并且应该集中在一个特定点上。 我现在使用的方法是使用包含所包含图像的SVG标签的G标签,并对G标签执行转换以进行缩放和平移。 有没有什么办法可以在不知道图像大小的情况下执行缩放以获取特定尺寸? 有什么办法让翻译的坐标适用于图像的中心而不是左上角? 我对SVG很新,所以可能是我以错误的方式去解决这个问题。有没有更好的方法来获得相同的结果?如何在另一个SVG文件中居中并缩放SVG文件
回答
我想你想先有其他SVG文件隐藏, 呼叫.getBBox()在JavaScript 做一些简单的计算, 设置相应的参数, 取消隐藏
我明白你的意思,或者至少我认为。在我的脑海里没有更好的想法来做到这一点,而不是分组。对我而言,<g>
是使用SVG文档的一个片段进行操作的最佳方式。但在我看来,将<rect>
元素视为您的视觉数据的容器。也许那么<g>
就没有必要,取决于你的编码要求。
如果你需要把只有简单的SVG图像,你可以不喜欢它:
<image id="yourSVGImage" xlink:href="yourImg.svg"
x="24px" y="50px" width="527px" height="328px"
preserveAspectRatio="XMinYMin meet"/>
如果你表达“宽度”和固定单位“高度”(如像素),你会达到什么我”我认为你需要。如果你需要的话,还有“preserveAspectRatio”来看看这个属性。
编辑:这个答案stil要求你知道内部SVG的大小。最分开的方法是在浏览器端使用getBBox()方法,可能使用visibility
或display
来防止用户看到未缩放的图形。 jsFiddle example已更新为使用此方法。
对于缩放,请使用viewBox attribute。从W3C的文档:
通常需要指定给定的一组图形拉伸以适应特定的容器元素。 'viewBox'属性提供了这个功能。
所有建立新视口(参见elements that establish viewports)的元素都具有属性'viewBox'。 'viewBox'属性的值是一个包含四个数字的列表
<min-x>
,<min-y>
,0<width>
和<height>
,...,它们在用户空间中指定一个矩形,该矩形应映射到由给定元素建立的视口的边界,帐户attribute ‘preserveAspectRatio’。Example ViewBox说明了在最外面的svg元素上使用'viewBox'属性来指定SVG内容应该伸展以适应视口边界。
上面的示例将preserveAspectRadio
指定为none
,因此嵌入式SVG会精确地适应容器SVG。默认值preserveAspectRadio
,即xMidYMid meet
,应该符合您的需求。该属性允许您对how to scale and position the enclosed graphics进行细化控制。
将内部SVG缩放到已知大小(viewBox
)后,居中应该是一个简单的计算问题,并正确使用transform
属性。这里距离http://jsfiddle.net/ento/hPuBY/剥离下来的例子:
<g transform="translate(125, 125)">
<!-- inner SVG is scaled to fit 150x150 -->
<svg width="150" height="150" viewBox="0 0 1500 1000">
<!-- coordinate system inside the SVG is 0x0 <> 1500x1000 -->
<rect width="1500" height="1000" />
<text x="750" y="550" font-size="150">
Embedded SVG
</text>
</svg>
</g>
- 1. 当图像是另一个SVG文件时缩放SVG图像元素
- 2. 对齐SVG缩放和中心加载的SVG文件
- 3. 如何使用html div将svg放在另一个svg中?
- 4. 缩放SVG在HTML5或SVG文件或CSS
- 5. 使用JS缩放和居中SVG
- 6. 如何合并多个SVG文件?
- 7. 如何将放大缩小控件添加到SVG文件
- 8. SVG缩放到组件
- 9. 在Java中缩放SVG
- 10. 如何缩放SVG rectagle以适合svg文本元素
- 11. 在svg中居中一个字符
- 12. SVG游戏中的SVG文件?
- 13. IOS显示SVG文件,缩放,并添加这些标记
- 14. 如何在C#中创建SVG文件并在iTextSharp pdf中导入文件?
- 15. 如何读取svg文件
- 16. 如何整合SVG文件?
- 17. 如何在raphael.js文件中添加一个sub svg标签?
- 18. 如何在svg中居中图像
- 19. html中的SVG文件
- 20. 如何在IE9中垂直居中SVG文本
- 21. 在SVG中生成数字圆 - 如何居中文本
- 22. 如何在SVG g元素中居中文本?
- 23. SVG缩放文本以适合容器
- 24. 缩放SVG图形
- 25. 动态缩放SVG
- 26. 居中SVG掩码的一个元素
- 27. 居中一个div内的SVG
- 28. 如何把svg文件放到你的应用程序中?
- 29. 缩放到一个元素 - jquery SVG
- 30. 插件缩放和平移SVG
这是一个耻辱有没有答案这个问题,可能是它应该是更具体的或者重新标记? – Parsa 2010-01-31 18:21:13