首页 > 解决方案 > PIL ImageDraw.Draw() 在函数中使用时不起作用

问题描述

我制作了一个程序,将 Mandelbrot 集渲染为图像。我将 draw.point() 方法放在一个函数中,但它似乎并没有真正在最终图像上绘制,但如果我将 im.save() 放在函数中它确实有效。完整的代码实际上使用了多处理并渲染了 CineBench 风格的图像,这就是为什么我不能将 im.save() 放在函数中,或者将 draw.point() 拉出来。还有其他方法可以解决问题吗?

from PIL import Image, ImageDraw


im = Image.new("RGB", (hor_res, vert_res), (0, 0, 0))
draw = ImageDraw.Draw(im)


def mandelbrot():
    # mandelbrot code


def box_renderer(x_start: int, x_end: int, y_start: int, y_end: int):
    for y in range(y_start, y_end):
        for x in range(x_start, x_end):
             colour = 255 - int(255*mandelbrot(x, y)/iterations)
             draw.point([x, y], (0, 0, colour))


if __name__ == "__main__":
    box_renderer(args)
    im.save("mandelbrot.png", "PNG")
    

这不是整个程序,但希望足够有意义

标签: pythonpython-imaging-librarymandelbrot

解决方案


我不确定您的示例代码是否具有代表性,因为此版本可以正常工作:

from PIL import Image, ImageDraw

hor_res, vert_res = 200, 200
im = Image.new("RGB", (hor_res, vert_res), (255, 0, 0))
draw = ImageDraw.Draw(im)

def box_renderer(x_start: int, x_end: int, y_start: int, y_end: int):
    for y in range(y_start, y_end):
        for x in range(x_start, x_end):
             colour = 128
             draw.point([x, y], (0, 0, colour))


if __name__ == "__main__":
    box_renderer(x_start=50,x_end=100,y_start=20,y_end=180)
    im.save("mandelbrot.png", "PNG")

在此处输入图像描述


推荐阅读