优化线条和矩形输出 mondrianish 图像错误

refine lines and rects output mondrianish image error

我使用mondrianish 来绘制蒙德里安风格的图像,我希望能够很好地控制线条和矩形。但是,当我将直线和矩形应用于 generate_image 函数时遇到错误。

我使用 mondrianish 0.5.3 模块。 https://pypi.org/project/mondrianish/

我输入:

from mondrianish import generate_image, generate_grid 

colors = ("#FFF8F0", "#FCAA67", "#7DB7C0", "#932b25", "#498B57")

lines, rects = generate_grid((20, 10), density=0.3)

with open("output-1.png", "wb") as f:
    generate_image("png", (lines, rects), 10, colors, f)
 

出现错误:

TypeError: unsupported operand type(s) for /: 'list' and 'int'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
c:/Users/Peter Chung/Desktop/MyScript/Python/MondrianScript.py in <module>
      6 
      7 with open("output-1.png", "wb") as f:
----> 8         generate_image("png", (lines, rects), 10, colors, f)
      9 

~/anaconda3/envs/finviz/lib/python3.8/site-packages/mondrianish/__init__.py in generate_image(format, size, stroke_width, colors, stream)
    266 
    267   # Generate image data.
--> 268   grid_size = (int(round(size[0]/stroke_width/7)), int(round(size[1]/stroke_width/7)))
    269   if grid_size[0] < 3 or grid_size[1] < 3: raise ValueError("Stroke width is too large.")
    270   lines, rectangles = generate_grid(grid_size)

TypeError: unsupported operand type(s) for /: 'list' and 'int'

我尝试更改列表和矩形的类型,但都有类似的错误。请指教。谢谢!

正确答案在@Tom Karzes 评论中,函数 generate_image 期望 size 参数具有 2 个数字的可迭代对象。

查看 mondrian 代码,特别是第 268 行,您可以看到它试图索引 size 参数并期望得到一个数字。

如果需要,您可以修改函数 generate_image() 并让它接受用户生成的网格。

有很多方法可以做到这一点,但我认为用下面的代码替换 __init__.py 中的第 268 行到第 270 行应该可行:

try:      
    grid_size = (int(round(size[0]/stroke_width/7)), int(round(size[1]/stroke_width/7)))
    if grid_size[0] < 3 or grid_size[1] < 3: raise ValueError("Stroke width is too large.")
    lines, rectangles = generate_grid(grid_size)
except TypeError:
    lines, rectangles = size

这只是一个快速修复,但它可以暂时解决您的问题。