【发布时间】:2014-05-26 20:39:27
【问题描述】:
我正在使用 svgwrite 模块在 Python 中创建一堆不同的 SVG 文件。我需要稍后在网站上展示这些图片。
由于这些图片由不同的数学对象组成,我在整个平面上工作,包括正数和负数。这意味着我需要移动所有对象,以便它们可见并保持结构。有时移动这些对象并不难,但由于我几乎在所有工作中都必须这样做,所以我正在寻找更通用的东西。
所以我正在寻找可以移动所有对象并保持其结构的东西,以便所有内容都可见并且图片的尺寸最小(即宽度/高度)。
我搜索了官方文档,但到目前为止还没有成功,可能只是盲目。
更新为了更清楚,我添加了一个示例
Python 示例:
import svgwrite
im = svgwrite.drawing.Drawing()
im.add(im.line( start = (-10,-10),\
end = (20,20),\
stroke= 'black'))
im.saveas('example.svg')
然后,当我查看 example.svg 时,例如Firefox 将只有部分“积极”部分,即从 [0,0] 到 [20,20] 的行。
或稍有不同的例子:
import svgwrite
im = svgwrite.drawing.Drawing()
im.add(im.line( start = (10,10),\
end = (20,20),\
stroke= 'black'))
im.saveas('example2.svg')
现在 [0,0] 和从 [10,10] 开始的行之间有不必要的间隙。
所以,总结一下。想象一堆 SVG 对象,它们可以在任何地方绘制。我想在所有对象中找到最小的 x_min、y_min 坐标,然后:
- 如果坐标 x_min (resp. y_min) 为负,则添加 |x_min| (resp. |y_min|) 到所有对象的所有 x (resp. y) 坐标。在哪里 |a|代表a的绝对值
- 如果坐标 x_min (resp. y_min) 为正,则从所有对象的所有 x (resp. y) 坐标中减去 x_min (resp. y_min)
之后,所有对象都将可见,并且它们将在零处接触一个或两个轴。如下所述,通过移动原点(以相应的方式)可以实现相同的结果。
注意当我在做这件事时,module Image 也有类似的问题。
【问题讨论】:
-
不清楚你在问什么。可以举个例子吗?
-
那么您是在尝试移动默认原点吗?
-
移动原点或移动所有对象对我来说都没有关系,只要一切都可见。当然,第一种情况似乎更容易一些。我的问题是,计算实际班次然后将其应用到我想要绘制的所有元素上有点过于繁琐了。那么,有什么方法可以改变原点吗?
-
在我看来,如果 Python 具有边界框功能,您将使用它来缩放/大小和定位您的 svg