优化线条和矩形输出 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
这只是一个快速修复,但它可以暂时解决您的问题。
我使用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
这只是一个快速修复,但它可以暂时解决您的问题。