如何让 svgwrite.drawing() 对象在每次迭代时重新初始化?
How can I get svgwrite.drawing() object to reinitialize on each iteration?
我是一名艺术家,在非常早期的学习阶段正在尝试一些生成艺术。我有一些代码可以在第一次迭代时完成预期的工作,它生成了一个小的 svg 文件,其中包含许多堆叠的圆圈,例如年轮:
import numpy as np
import svgwrite
import os
dwg = svgwrite.Drawing('svgobject',size=('620','620'), profile='full') #position One
n_circles = 3 # will generate n files
max_rad=300 # maxiumu radius, modify with interactive() later
r = 1.0 # starting radius, modify with interactive() later
c=[310,310] # Center point of circles, modify with interactive() later
for i in range(n_circles):
# dwg = svgwrite.Drawing('svgobject',size=('620','620'), profile='full') #position Two
while r < max_rad:
step = np.around(np.random.uniform(2, 6),1) # small positive increase in radius
r += step # increment radius
dwg.add(dwg.circle(c, r,stroke="black", fill='none')) # append 'svgobject'
n = 0
while os.path.exists("SVG_Circles%s.svg" % n):
n += 1
dwg.saveas("SVG_Circles%s.svg" % n,pretty=True)
问题是,在任何后续迭代中,它都会做以下两件事之一。使用 dwg = ... 在第一个位置我得到 3 个文件,它们都是相同的图像,与第一个 运行 没有不同的随机化。在第二个位置,我得到第一个文件很好,然后后续文件是空白的。
我怀疑我需要找到一种方法来从 svgwrite.Drawing() 中重新初始化类文件对象 'svgobject',但我已将它或多或少地放在每个可能的位置,在每个循环,一两个案例都是我得到的。
那么我如何让它以生成 svg 文件的方式进行迭代,将其写入一个唯一的文件名,清除我的 container/fileobject 'svgobject',然后迭代 [=26] =]次?
谢谢!
我重写了它,这对我有用:
import numpy as np
import svgwrite
import os
def create_img(file_name):
n_circles = 3 # will generate n files
max_rad=300 # maxiumu radius, modify with interactive() later
r = 1.0 # starting radius, modify with interactive() later
c=[310,310] # Center point of circles, modify with interactive() later
dwg = svgwrite.Drawing(size=('620','620')) #position Two
while r < max_rad:
step = np.around(np.random.uniform(2, 6),1) # small positive increase in radius
r += step # increment radius
dwg.add(dwg.circle(c, r,stroke="black", fill='none')) # append 'svgobject'
dwg.saveas(file_name,pretty=True)
files = []
for z in range(3):
file_name = f"SVG_Circles{z}.svg"
create_img(file_name)
我是一名艺术家,在非常早期的学习阶段正在尝试一些生成艺术。我有一些代码可以在第一次迭代时完成预期的工作,它生成了一个小的 svg 文件,其中包含许多堆叠的圆圈,例如年轮:
import numpy as np
import svgwrite
import os
dwg = svgwrite.Drawing('svgobject',size=('620','620'), profile='full') #position One
n_circles = 3 # will generate n files
max_rad=300 # maxiumu radius, modify with interactive() later
r = 1.0 # starting radius, modify with interactive() later
c=[310,310] # Center point of circles, modify with interactive() later
for i in range(n_circles):
# dwg = svgwrite.Drawing('svgobject',size=('620','620'), profile='full') #position Two
while r < max_rad:
step = np.around(np.random.uniform(2, 6),1) # small positive increase in radius
r += step # increment radius
dwg.add(dwg.circle(c, r,stroke="black", fill='none')) # append 'svgobject'
n = 0
while os.path.exists("SVG_Circles%s.svg" % n):
n += 1
dwg.saveas("SVG_Circles%s.svg" % n,pretty=True)
问题是,在任何后续迭代中,它都会做以下两件事之一。使用 dwg = ... 在第一个位置我得到 3 个文件,它们都是相同的图像,与第一个 运行 没有不同的随机化。在第二个位置,我得到第一个文件很好,然后后续文件是空白的。
我怀疑我需要找到一种方法来从 svgwrite.Drawing() 中重新初始化类文件对象 'svgobject',但我已将它或多或少地放在每个可能的位置,在每个循环,一两个案例都是我得到的。
那么我如何让它以生成 svg 文件的方式进行迭代,将其写入一个唯一的文件名,清除我的 container/fileobject 'svgobject',然后迭代 [=26] =]次?
谢谢!
我重写了它,这对我有用:
import numpy as np
import svgwrite
import os
def create_img(file_name):
n_circles = 3 # will generate n files
max_rad=300 # maxiumu radius, modify with interactive() later
r = 1.0 # starting radius, modify with interactive() later
c=[310,310] # Center point of circles, modify with interactive() later
dwg = svgwrite.Drawing(size=('620','620')) #position Two
while r < max_rad:
step = np.around(np.random.uniform(2, 6),1) # small positive increase in radius
r += step # increment radius
dwg.add(dwg.circle(c, r,stroke="black", fill='none')) # append 'svgobject'
dwg.saveas(file_name,pretty=True)
files = []
for z in range(3):
file_name = f"SVG_Circles{z}.svg"
create_img(file_name)