python - 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")
这不是整个程序,但希望足够有意义
解决方案
我不确定您的示例代码是否具有代表性,因为此版本可以正常工作:
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")
推荐阅读
- javascript - 验证条件后显示警告消息
- java - 尝试在 Spring Controller 中使用 BindingResult 时出现 ConstraintViolationException
- ios - Xcode 自动生成的文档格式
- sql-server - 为什么我的删除部分存储过程不起作用?
- django - 如何允许带有外键的内联模型只使用一次?
- sql - 有谁知道如何在 Google Big Query 中对这个查询进行 SQL 查询?
- jquery - Slick 无法在 iPhone / iPad Chrome 上更改方向/调整窗口大小
- php - CURL xml 发布请求
- javascript - Laravel error_npm
- python - 将不带引号的列表参数传递给脚本